8

私は次のコード行に取り組んでいます。

val list = Car.getNames()
Ok(Json.toJson(list))

次のエラーが発生しました。

[エラー]my_app/ app / models / Car.scala:51:タイプjava.util.DateのJsonデシリアライザーが見つかりません。このタイプの暗黙的な読み取りまたはフォーマットを実装してみてください。

Carjava.util.dateパラメータの1つとしてオブジェクトがあり、オブジェクトをサポートしていないため、オブジェクトをサポートするために読み取り書き込みを実装しました。java.util.dateimport play.api.libs.json.*

私の間違いを指摘していただけませんか?

implicit object CarFormat extends Format[Car] {

    def reads(json: JsValue): Car = Car(
      (json \ "id").as[Long],
      (json \ "height").as[Double],
      (json \ "weight").as[Double],
      (json \ "date").asOpt[java.util.Date]
    )   

    def writes(car: Car) = 
        JsObject(
            Seq(
                "id" -> JsString(car.id.toString),
                "height" -> JsString(car.height.toString),
                "weight" -> JsString(car.weight.toString),
                "date" -> JsString(car.date.toString)
            )   
        )   
}   
4

1 に答える 1

11

forのみを定義しましたが、 FormatforCarが必要Formatですjava.util.Date。これを試して:

import play.api.libs.json._

case class Car(id:Long, height:Double, weight:Double, date:Option[java.util.Date])

implicit object CarFormat extends Format[Car] {

  implicit object DateFormat extends Format[java.util.Date] {
    val format = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
    def reads(json:JsValue): java.util.Date = format.parse(json.as[String])
    def writes(date:java.util.Date) = JsString(format.format(date))
  }

  def reads(json: JsValue): Car = Car(
    (json \ "id").as[Long],
    (json \ "height").as[Double],
    (json \ "weight").as[Double],
    (json \ "date").asOpt[java.util.Date]
  )   

  def writes(car: Car) = 
    JsObject(
        Seq(
            "id" -> JsString(car.id.toString),
            "height" -> JsString(car.height.toString),
            "weight" -> JsString(car.weight.toString),
            "date" -> JsString(car.date.toString)
        )   
    )   
}   
于 2012-11-24T04:04:57.627 に答える