【发布时间】:2016-10-18 21:38:59
【问题描述】:
我想做的就是受此启发:https://www.playframework.com/documentation/2.5.x/ScalaJsonHttp
我想要Person 可以附加Address。在我的示例中实际上是多对多,因此一个人可以有多个地址,并且一个地址可以附加到多个人。
查询没有问题。我从 DB 层返回:Future[Seq[((Person, PersonAddress), Address)]]。
当我想以 json 格式返回结果时,我的问题就开始了。对于 Person 单独来说,它会很简单,因为案例类已经处理好了,但是对于这样的 Seq,它就更复杂了。
所以我尝试了这个:
1) DB 现在只返回Future[Seq[((Person, PersonAddress)]],让我更容易理解
2) case class PersonWithPersonAddress(person: Person, personAddress: PersonAddress) 被添加为助手而不是使用Tuple2[Person, PersonAddress]
3) 我写了以下作者:
implicit val writes: Writes[PersonWithPersonAddress] = (
(JsPath \ "person").write[Person],
(JsPath \ "personAddress").write[PersonAddress]
) (unlift(PersonWithPersonAddress.unapply))
根据编译器,这还不够。
找不到类型 PersonAddress 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。
然后我尝试添加:
implicit val personFormat = Json.format[Person]
implicit val PersonAddressFormat = Json.format[PersonAddress]
但我得到了
(play.api.libs.json.OWrites[Person], play.api.libs.json.OWrites[PersonAddress]) does not take parameters
我继续手动编写我的Writes[Person],但这当然不会改变Json.format[Person]。
现在我没有想法了
【问题讨论】:
标签: json scala playframework