Play框架自动JSON编组

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内置的自

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

我在网上反复读到,使用Play的JSON支持只不过是一种乐趣。但从Spring开始,我有一个内置的
HttpMessageConverter
(特别是
MappingJacksonHttpMessageConverter
),它几乎不费吹灰之力就能自动在控制器中处理请求和响应

另一方面,Play(看起来)要求您为每个要封送的类编写读写转换器。例如(从以下位置):


在我看来,与Spring内置的自动消息转换功能相比,这似乎很乏味。据我所知,Play也在幕后使用Jackson,因此Scala/Play也可以实现同样的功能,或者我的前提是否有缺陷?

您可以使用
写入

我从未使用过Spring,但根据for
MappingJacksonHttpMessageConverter
,它只适用于类型化bean和非类型化的
HashMap
实例。玩为Scala
Map
实例内置了
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]