Недавно я начал использовать Playframework и внедряю сайт, используя Play 2.1.1 и Slick 1.0.0. Теперь я пытаюсь обернуть голову вокруг Json Writes, поскольку я хочу вернуть Json в один из моих контроллеров.Json Writes in Play 2.1.1
Я смотрел на несколько ссылок на эту тему (как this one и this one, но не могу понять, что я делаю неправильно
у меня есть модель, глядя, как это:.
case class AreaZipcode( id: Int,
zipcode: String,
area: String,
city: String
)
object AreaZipcodes extends Table[AreaZipcode]("wijk_postcode") {
implicit val areaZipcodeFormat = Json.format[AreaZipcode]
def id = column[Int]("id", O.PrimaryKey, O.AutoInc)
def zipcode = column[String]("postcode", O.NotNull)
def area = column[String]("wijk", O.NotNull)
def city = column[String]("plaats", O.NotNull)
def autoInc = * returning id
def * = id ~ zipcode ~ area ~ city <> (AreaZipcode.apply _, AreaZipcode.unapply _)
}
Вы можете увидеть неявные Вэла, которую я пытаюсь использовать, но когда я пытаюсь вернуть JSON в моем контроллере, делая это:
Ok(Json.toJson(areas.map(a => Json.toJson(a))))
Я someho ж по-прежнему сталкивается с этим ErrorMessage:
No Json deserializer found for type models.AreaZipcode. Try to implement an implicit Writes or Format for this type.
Я попробовал несколько других способов для осуществления записи. Например, я попытался следующие вместо неявного вал сверху:
implicit object areaZipcodeFormat extends Format[AreaZipcode] {
def writes(a: AreaZipcode): JsValue = {
Json.obj(
"id" -> JsObject(a.id),
"zipcode" -> JsString(a.zipcode),
"area" -> JsString(a.area),
"city" -> JsString(a.city)
)
}
def reads(json: JsValue): AreaZipcode = AreaZipcode(
(json \ "id").as[Int],
(json \ "zipcode").as[String],
(json \ "area").as[String],
(json \ "city").as[String]
)
}
Может кто-то пожалуйста, мне точку в правильном направлении?
Спасибо за быстрый ответ! Я некоторое время смотрел на эти документы. И спасибо за предлагаемое решение! Однако, если я заменил неявный val из исходного блока кода вашим неявным объектом, Play начнет жаловаться на метод формата на объекте Json. Есть идеи? – gorow
Просто деталь, очень сжатый синтаксис: неявная область valZipCodeFormat = Json.format [AreaZipcode] –
Oups, извините, ошибка при копировании и вставке. @JulienLafont благодарит за это. – Carsten