从RESTful Web服务发送JSON时是否需要DTO?

时间:2016-08-02 23:57:18

标签: java json spring rest jackson

我尝试使用Spring MVC构建RESTful Web服务。我使用Jackson的rapidxml JSON解析器进行客户端和服务器端之间的通信。

我正在尝试确定是否将DTO(数据传输对象)实施到我的RESTful API中。我目前正在使用杰克逊的@JsonProperty(access = Access.WRITE_ONLY)@JsonIgnore注释来防止敏感字段(如密码)被发送到客户端。

因此,当从响应正文中省略敏感字段或者注释@JsonIgnore@JsonProperty足以防止时,使用JSON进行客户端与服务器之间的通信时,DTO是否必要?敏感数据泄漏?

1 个答案:

答案 0 :(得分:3)

假设您谈到将实体序列化为json而不是使用不太清楚的DTO,从架构的角度来看,是DTO是正确的选择。在控制器下面,最常见的是在某个域上运行的服务层,让我们说来自排队系统的持久性实体或实体。

将REST API与域隔离并将较低级别的域实体映射到服务级别的DTO是最明智的,最常见的是使用POJO映射器。

这会对性能产生一些影响,您可以对其进行优化,但却具有层间结构隔离的优势。

第二个好处是,您可以聚合来自较低层的信息并操纵您的REST界面,为您提供最佳服务,

如果再次讨论实体在持久层中添加REST api属性是错误的。

从概念的角度来看这一切。 另一件应该阻止你服务JPA2实体的事情是从查询返回的对象是增强对象,所以使用mapper会再次给你更多控制权。

选择映射器配置有点棘手但是因为如果你在持久性/域级映射中暴露crud操作变得多余。 公开实体只会导致缩放问题