繁体   English   中英

Scala Play Json隐式写入类型不匹配

[英]Scala Play Json implicit writes type mismatch

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

我使用的环境是:

Scala: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))给出错误

没有为类型model.Subscription.type找到Json序列化器。 尝试为此类型实现隐式的Writes或Format。

这很奇怪,因为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是。 我曾经在另一个示例中做过类似的事情,但效果很好。 任何帮助将不胜感激。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM