将DTO转换为实体,反之亦然

我在我的Web应用程序中使用Spring MVC架构和JPA

在哪里手动将DTO转换为实体,反之亦然(不使用任何框架)?

我想你问的是在哪里写整个实体 – > DTO转换逻辑。

喜欢你的实体

 class StudentEntity { int age ; String name; //getter //setter public StudentDTO _toConvertStudentDTO(){ StudentDTO dto = new StudentDTO(); //set dto values here from StudentEntity return dto; } } 

你的DTO应该是这样的

 class StudentDTO { int age ; String name; //getter //setter public StudentEntity _toConvertStudentEntity(){ StudentEntity entity = new StudentEntity(); //set entity values here from StudentDTO return entity ; } } 

你的控制器应该是这样的

 @Controller class MyController { public String my(){ //Call the conversion method here like StudentEntity entity = myDao.getStudent(1); StudentDTO dto = entity._toConvertStudentDTO(); //As vice versa } } 

这是一个老问题,已接受答案但是要使用模型映射器API以简单的方式更新它。

  org.modelmapper modelmapper 0.7.4  

使用此API,您可以避免手动设置器和getter,如接受的答案中所述。

在我看来,两个转换都应该在私有实用程序方法的帮助下发生,并使用Java8流的映射(如果交换了DTO集合),如本文所示 。

它应该发生在控制器上,因为DTO应该是独占的传输对象。 我没有进一步采取我的DTO。

您可以在实体上编写服务和数据访问层,并在调用服务方法之前将DTO转换为实体,并在从控制器返回响应之前将实体转换为DTO。

我更喜欢这种方法,因为实体很少改变,并且可以根据需要从DTO添加/删除数据。

此处描述了详细的模型映射器配置和规则

我的想法是

  • 在调度jsp页面之前,应该在Controller中完成实体 – > DTO转换
  • 在validation从jsp页面返回的DTO之后,DTO – >实体转换也应该在Controller中完成

它使您可以更好地控制进程,并且每次更改填充实体的某些逻辑时,您不必更改服务/持久性类。