0

これは私の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],

誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

1

インスタンスにタイプミスがありFormatます: フィールドを書き込んでい"id"ますが、 という名前のフィールドを読み込もうとしています"idCout"。それらの 1 つを変更します。

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)
于 2012-09-14T15:18:10.197 に答える