【问题标题】:Scala Play Json implicit writes type mismatchScala Play Json 隐式写入类型不匹配
【发布时间】:2016-09-30 19:50:28
【问题描述】:

我是 Scala 和 Play 的新手,我就这个简单的例子寻求帮助。我试图自己寻找解决方案,但没有成功。 我正在尝试从 Mastering Play Framework for Scala 一书中做示例,该书是关于扩展 Json 解析器(第 29-30 页)。

我使用的环境是:

斯卡拉:2.11.7 播放:2.5.8 激活器:1.3.10

代码是:

case class Subscription(emailId: String, interval: Long)

在控制器中:

import play.api.libs.json.Json
import play.api.libs.json.JsValue
import play.api.libs.json.Writes

.....
val parseAsSubscription = parse.using { 
    request => 
      parse.json.map {
        body =>
          val  emailId:String = (body \ "emailId").as[String]
          val fromDate:Long = (body \ "fromDate").as[Long]
          Subscription(emailId, fromDate)
      }
  }

implicit val subWrites:Writes[Subscription] = Json.writes[Subscription]

def getSub = Action(parseAsSubscription) {
    request => 
      val subscription: Subscription = request.body
      Ok(Json.toJson(Subscription))
}

该行:Ok(Json.toJson(Subscription)) 给出错误

找不到类型 models.Subscription.type 的 Json 序列化程序。尝试 为此类型实现隐式写入或格式。

这很奇怪,因为 Writes 对象是在上面一行定义的。因此,我尝试将其显式传递给 toJson 方法:

Ok(Json.toJson(Subscription)(subWrites))

它给了我一个不同的错误,这部分解释了为什么现有的 Writes 对象不适合:

类型不匹配;
成立: play.api.libs.json.Writes[models.Subscription]
必需的: play.api.libs.json.Writes[models.Subscription.type]

但是,我不明白这个错误的性质以及 models.Subscription.type 是什么。 我曾经在另一个示例中做过类似的事情,并且效果很好。 任何帮助将不胜感激。

【问题讨论】:

    标签: json scala playframework-2.0


    【解决方案1】:

    您正在尝试序列化类型Subscription,而不是存储为值subscription 的请求正文。尝试用Ok(Json.toJson(subscription)) 替换最后一行。

    【讨论】:

    • 非常感谢@Eric。从我的角度来看,这确实是一种愚蠢的错误
    • 不客气!愚蠢的错误是最难捕捉的:)
    猜你喜欢
    • 1970-01-01
    • 2014-10-31
    • 2016-07-03
    • 1970-01-01
    • 2020-08-09
    • 2012-08-27
    • 2020-09-27
    • 2016-06-14
    • 2017-04-11
    相关资源
    最近更新 更多