将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中完成
它使您可以更好地控制进程,并且每次更改填充实体的某些逻辑时,您不必更改服务/持久性类。