我正在使用Scala 2.10、Salat和Play frmework 2.1-RC2(即将升级到2.1版本)以及MongoDB构建一个应用程序。
这是一个匿名应用程序,其中向消费者公开JSON web服务。到目前为止,JSON直接使用Play的JSON API和隐式转换器转换为Model对象。我必须重构一些case类以避免22元组的限制,现在我重构的不是平面case类,而是嵌入式case(和嵌入式MongoDB集合)。
Web服务接口应该保持不变,客户端应该仍然像以前一样在平面结构中传递JSON数据,但应用程序需要将它们映射到适当的事例类结构中。处理这种情况的最佳方法是什么。我害怕写很多转换代码<->平面JSON<->复杂事例类结构<->从复杂的事例类到平面JSON输出。
你将如何满足这样的要求?我假设案例类22元组限制可能是许多其他人为了处理这种需求而面临的?您将如何处理此
Play 2.1 json库严重依赖组合子(path1 and path2
)。这些组合子都有相同的22限制。这给了你两个选择:
- 不要使用组合子并以艰难的方式构造对象:
path(json)
会在路径中的那个点给你值。在ScalaJsonCombinators上搜索"访问JsPath的值"将提供更多示例 - 首先将json转换为单个对象中不超过22个值的结构,然后使用普通组合子。有关转换的更多信息,请点击此处:ScalaJsonTransformers