【问题标题】:Slick result to json光滑的结果到 json
【发布时间】: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


    【解决方案1】:

    这对你来说应该足够了:

    import play.api.libs.json.Json
    
    implicit val personFormat = Json.format[Person]
    implicit val personAddressFormat = Json.format[PersonAddress]
    implicit val personWithPersonAddressFormat = Json.format[PersonWithPersonAddress]
    

    如果您仍想逐个字段定义Writes,您应该试试这个:

    import play.api.libs.functional.syntax._
    import play.api.libs.json._
    
    implicit val personWrites = Json.writes[Person]
    implicit val personAddressWrites = Json.writes[PersonAddress]
    implicit val personWithAddressWrites: Writes[PersonWithPersonAddress] = (
      (__ \ "person").write[Person] and
      (__ \ "personAddress").write[PersonAddress]
    )(unlift(PersonWithPersonAddress.unapply))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多