Play框架自动JSON编组
我希望了解Play框架如何处理Scala对象到JSON的转换,反之亦然(特别是对于RESTful API): 我在网上反复读到,使用Play的JSON支持只不过是一种乐趣。但从Spring开始,我有一个内置的Play框架自动JSON编组,json,scala,playframework-2.0,marshalling,Json,Scala,Playframework 2.0,Marshalling,我希望了解Play框架如何处理Scala对象到JSON的转换,反之亦然(特别是对于RESTful API): 我在网上反复读到,使用Play的JSON支持只不过是一种乐趣。但从Spring开始,我有一个内置的HttpMessageConverter(特别是MappingJacksonHttpMessageConverter),它几乎不费吹灰之力就能自动在控制器中处理请求和响应 另一方面,Play(看起来)要求您为每个要封送的类编写读写转换器。例如(从以下位置): 在我看来,与Spring内置的自
HttpMessageConverter
(特别是MappingJacksonHttpMessageConverter
),它几乎不费吹灰之力就能自动在控制器中处理请求和响应
另一方面,Play(看起来)要求您为每个要封送的类编写读写转换器。例如(从以下位置):
在我看来,与Spring内置的自动消息转换功能相比,这似乎很乏味。据我所知,Play也在幕后使用Jackson,因此Scala/Play也可以实现同样的功能,或者我的前提是否有缺陷?您可以使用
写入
:
我从未使用过Spring,但根据forMappingJacksonHttpMessageConverter
,它只适用于类型化bean和非类型化的HashMap
实例。玩为ScalaMap
实例内置了Writes
实例,并且Writes
宏可以轻松为案例类创建实例,因此功能类似。然而,我猜case类的样板文件通常比类型化bean少,即使有额外的行来创建隐式Writes
实例
implicit val locationWrites: Writes[Location] = (
(JsPath \ "lat").write[Double] and
(JsPath \ "long").write[Double]
)(unlift(Location.unapply))
implicit val locationWrites = Json.writes[Location]