Play Framework自动JSON编组

oym*_*oym 3 json scala marshalling playframework-2.0

我希望直接了解Play Framework如何处理Scala对象到JSON的转换,反之亦然(特别是对于RESTful API):

我在网上一遍又一遍地阅读使用Play的JSON支持只是一种乐趣.但是来自Spring,我有一个内置HttpMessageConverter(特别是MappingJacksonHttpMessageConverter),它将在我的控制器中自动编组请求和响应,几乎没有任何努力.

另一方面,播放(看起来)要求您为每个要编组的课程编写读写转换器.例如(来自Play Docs):

implicit val locationWrites: Writes[Location] = (
  (JsPath \ "lat").write[Double] and
  (JsPath \ "long").write[Double]
)(unlift(Location.unapply))
Run Code Online (Sandbox Code Playgroud)

对我而言,与Spring的内置自动消息转换功能相比,这似乎很乏味.据我所知,Play也使用了Jackson,所以可以用Scala/Play完成同样的工作,或者也许是我的前提有缺陷?

win*_*ner 8

你可以使用writes :

implicit val locationWrites = Json.writes[Location]
Run Code Online (Sandbox Code Playgroud)

我从来没有使用过Spring,但根据该文档MappingJacksonHttpMessageConverter,它只会为输入豆类和非类型化的工作HashMap情况.玩!已经Writes为Scala Map实例构建了实例,并且writes宏可以轻松地为案例类创建实例,因此功能类似.但是,我猜测案例类通常比类型化的bean具有更少的样板,即使使用额外的行来创建隐式Writes实例.