我正在编写一个公开 RESTful 服务的 Spring (4.1.7) Web 应用程序,并希望使用 DTO“资源”对象在 Controller 和客户端浏览器之间进行通信,而不是公开我的持久性实体。
目前应用有以下几层:
- 查看(JSP/JSON)
- 控制者
- DAO(
@Service
) - DAO(
@Repository
)
我的问题是,我应该在哪里将我的 DAO 实体映射到 DTO 资源?我查看了一些使用 Spring HATEOAS
的示例,它们显示 Resource
扩展 ResourceSupport
的对象被映射到 Controller
.这是最好的方法吗,还是我应该从 DAO 服务返回资源?
我希望将 Link
元素添加到返回的资源(用于自身和相关资源),但看不到 Link
元素如果在Service
不知道 Controller
并且它是 @RequestMapping
。另一方面,我也不知道将 Controller
与映射混淆是否是一种好习惯。
最佳答案
DTO(数据传输对象)顾名思义,用于将数据传输出您的应用程序。在您的情况下,放置它们的最佳位置是在您的 Controller 层中。 您应该只将 DTO 公开给 UI,当您从 UI 获取数据时,您应该将其转换为业务实体并调用下面的层。 原因是,通过这种方式,您可以在不破坏 UI 的情况下自由更改业务实体,从而实现更好的维护。出于同样的原因,您的业务/DAO 层也应该不知道 UI 和 DTO。 因此,在您的应用中将 DTO 转换为业务实体(反之亦然)的最佳位置是 Controller 层。
PS:看看Dozer也是;)
关于java - Spring DTO-DAO(资源-实体)映射到哪个应用层 : Controller or Service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31644131/