我的Play Framework应用程序中存在一种情况,其中一组模型依赖于其他模型,这在尝试将它们序列化为JSON时会产生潜在的危险。此外,每个模型中都有一些属性,我不想向客户端公开。最后,但并非最不重要的是,Web客户端收到的moel实例中的一些属性并非真正来自数据库,而是来自第三方Web服务。
我听说在将对象渲染为JSON之前可以应用自定义序列化程序,但我想使用更简单的方法:然后将DTO序列化为JSON。
问题是,我应该在哪里为每个Model类放置DTO转换函数?控制器?模型?也许最好的方法是遵循序列化策略并创建一些转换类 - 每个模型一个?
我最担心的是转换器也应该彼此了解,因为很明显我想先将作者实例中的每个Book实例转换为DTO,然后在DTO中转换Author。这真的很糟糕吗?
答案 0 :(得分:3)
在标准Java EE应用程序(Spring)中,您应该使用Dozer framework在模型对象和DTO之间进行转换。
在游戏中!上下文,我应该将DTO和转换器放在专用包中,或放在models
的子包中。
答案 1 :(得分:1)
我正在使用模型类作为DTO,并使用@NoJsonExpose
注释来表示我不想公开的属性或其他模型依赖项。
以下是@NoJsonExpose
注释的实现以及考虑它的改进的RenderJson
结果对象。
只需覆盖Controller
的{{1}}即可使用新的renderJson()
对象。