我尝试使用Spring MVC构建RESTful Web服务。我使用Jackson的rapidxml JSON解析器进行客户端和服务器端之间的通信。
我正在尝试确定是否将DTO(数据传输对象)实施到我的RESTful API中。我目前正在使用杰克逊的@JsonProperty(access = Access.WRITE_ONLY)
和@JsonIgnore
注释来防止敏感字段(如密码)被发送到客户端。
因此,当从响应正文中省略敏感字段或者注释@JsonIgnore
和@JsonProperty
足以防止时,使用JSON进行客户端与服务器之间的通信时,DTO是否必要?敏感数据泄漏?
答案 0 :(得分:3)
假设您谈到将实体序列化为json而不是使用不太清楚的DTO,从架构的角度来看,是DTO是正确的选择。在控制器下面,最常见的是在某个域上运行的服务层,让我们说来自排队系统的持久性实体或实体。
将REST API与域隔离并将较低级别的域实体映射到服务级别的DTO是最明智的,最常见的是使用POJO映射器。
这会对性能产生一些影响,您可以对其进行优化,但却具有层间结构隔离的优势。
第二个好处是,您可以聚合来自较低层的信息并操纵您的REST界面,为您提供最佳服务,
如果再次讨论实体在持久层中添加REST api属性是错误的。
从概念的角度来看这一切。 另一件应该阻止你服务JPA2实体的事情是从查询返回的对象是增强对象,所以使用mapper会再次给你更多控制权。
选择映射器配置有点棘手但是因为如果你在持久性/域级映射中暴露crud操作变得多余。 公开实体只会导致缩放问题