Play2隐式读取或格式化Json异常

时间:2012-09-14 14:51:49

标签: json scala playframework

这是我的Cout对象:

case class Cout (idCout:Int, cout:String)

object Cout{

  implicit object CoutFormat extends Format[Cout] {
    def reads(json: JsValue): Cout = Cout(
      (json \ "idCout").as[Int],
      (json \ "cout").as[String]
    )

    def writes(s: Cout): JsValue = JsObject(Seq(
      "id" -> JsNumber(s.idCout),
      "cout" -> JsString(s.cout)
    ))
  }
}

我在使用WS调用Web服务时尝试使用此类:

val cout = response.json.as[Cout]

但scala编译器一直在抱怨:

[RuntimeException: Int expected]

(json \ "idCout").as[Int],

有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

您的Format个实例中有一个拼写错误:您正在撰写"id"字段,但尝试阅读一个名为"idCout"的字段。改变其中一个:

case class Cout (idCout: Int, cout: String)

object Cout {
  implicit object CoutFormat extends Format[Cout] {
    def reads(json: JsValue): Cout = Cout(
      (json \ "idCout").as[Int],
      (json \ "cout").as[String]
    )

    def writes(s: Cout): JsValue = JsObject(Seq(
      "idCout" -> JsNumber(s.idCout),
      "cout" -> JsString(s.cout)
    ))
  }
}

它有效:

scala> Json.toJson(Cout(1, "test")).as[Cout]
res0: Cout = Cout(1,test)