我最近开始使用Play框架,并正在使用Play 2.1.1和Slick 1.0.0实现一个网站。我现在正试图理解Json Writes,因为我想在其中一个控制器中返回Json。
我一直在查看几个关于此主题的参考文献(如这篇和这篇),但是无法弄清楚自己做错了什么。
我有一个模型,看起来像这样:
您可以看到我试图使用的隐式val,但是当我尝试通过这样做在我的控制器中返回Json时:
我一直在查看几个关于此主题的参考文献(如这篇和这篇),但是无法弄清楚自己做错了什么。
我有一个模型,看起来像这样:
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 _)
}
您可以看到我试图使用的隐式val,但是当我尝试通过这样做在我的控制器中返回Json时:
Ok(Json.toJson(areas.map(a => Json.toJson(a))))
我仍然面临着这个错误信息:
No Json deserializer found for type models.AreaZipcode. Try to implement an implicit Writes or Format for this type.
我尝试了几种其他的方法来实现Writes。例如,我尝试使用以下代码替代上面的隐式val:
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]
)
请问有人可以指点我方向吗?
type WeightedTerm = (String,TermWeight)
implicit val WeightedTermFormat = Json.format[WeightedTerm]
会产生编译错误找不到与未应用参数匹配的apply函数 - Jonathan Stray