Java DTO-in-Play框架

Java DTO-in-Play框架,java,model-view-controller,playframework,dto,Java,Model View Controller,Playframework,Dto,在我的Play Framework应用程序中,有一种情况是一组模型依赖于其他模型,这在尝试将它们序列化为JSON时会产生潜在的危险。此外,每个模型中都有一些属性,我不想向客户机公开这些属性。最后,但并非最不重要的一点是,web客户端接收的moel实例中的一些属性实际上不是来自DB,而是来自第三方web服务 我听说在将对象呈现为JSON之前可以应用自定义序列化程序,但我想使用更简单的方法:DTO,然后将其序列化为JSON 问题是,我应该将每个模型类的DTO转换函数放在哪里?控制器?模型也许最好的方

在我的Play Framework应用程序中,有一种情况是一组模型依赖于其他模型,这在尝试将它们序列化为JSON时会产生潜在的危险。此外,每个模型中都有一些属性,我不想向客户机公开这些属性。最后,但并非最不重要的一点是,web客户端接收的moel实例中的一些属性实际上不是来自DB,而是来自第三方web服务

我听说在将对象呈现为JSON之前可以应用自定义序列化程序,但我想使用更简单的方法:DTO,然后将其序列化为JSON

问题是,我应该将每个模型类的DTO转换函数放在哪里?控制器?模型也许最好的方法是遵循序列化器策略,创建几个转换类——每个模型一个

我最大的担心是转换器也应该相互了解,因为很明显,我想先将Author实例中的每个Book实例转换为DTO,然后再将Author转换为DTO。这真的很糟糕吗?

在标准JavaEE应用程序(Spring)中,您应该使用在模型对象和DTO之间进行转换


在剧中!在上下文中,我应该将DTO和转换器放在一个专用的包中,或者放在
模型的子包中
我将模型类用作DTO,并使用
@NoJsonExpose
注释来表示我不想公开的属性或其他模型依赖项

下面是
@NoJsonExpose
注释的实现以及考虑它的改进的
RenderJson
结果对象

只需覆盖
控制器的
renderJson()
即可使用新的
renderJson
对象