6
A
回答
7
我想你是问在哪里写整个实体 - > 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
}
}
3
在我看来
- 实体 - 验证后>实体转换,应在控制器要做的事 - > DTO的转换应在控制器进行调度jsp页面
- 的DTO前DTO从jsp页面返回
它为您提供了对进程的更多控制,并且您不必在每次填充实体的某个逻辑被更改时都更改服务/持久性类。
+0
同意。另外,如果将Entity和DTO中的转换逻辑组合在一起,则两者不能分离为单独的JAR构件。例如,DTO类不能在没有包含实体的情况下提供给第三方,实体(大多数情况下)您不希望这样做。 – 2017-06-13 23:47:51
3
这是公认的答案,但虽然以一个老问题使用model-mapper API以简单的方式更新它。
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>0.7.4</version>
</dependency>
使用这个API,你避免手工二传手&干将为接受的答案解释。
在我看来,这两种转换都应该在控制器中使用私有工具方法,并使用Java8流的映射(如果交换DTO集合),如中所示。
它应该发生在控制器上,因为DTO意味着独占传输对象。我不会让我的DTO进一步下降。
您的代码服务&实体上的数据访问层,并在调用服务方法之前将DTO转换为实体&在返回控制器响应之前将实体转换为DTO。
我更喜欢这种方法,因为实体很少改变,数据可以根据需要添加/从DTO中删除。
详细模型映射器的配置和规则被描述here
相关问题
- 1. 将JavaUtilDate转换为NSDate,反之亦然?
- 2. 将lonlat转换为xyz,反之亦然
- 3. 将UIImage转换为NSString(反之亦然)
- 4. 将ArrayBuffer转换为Array,反之亦然
- 5. 将HTML转换为Xliff,反之亦然
- 6. 将列转换成行,反之亦然
- 7. 转换Unicode字符串,反之亦然
- 8. 将实体对象转换为POJO,反之亦然的最佳方式?
- 9. 如何实现二进制到ASCII转换? (反之亦然)
- 10. 将boost shared_ptr转换为void *,反之亦然
- 11. PHP-MYSQL:将Unix时间戳转换为DateTime,反之亦然
- 12. 将NSDictionary对象转换为NSData对象,反之亦然
- 13. 将字节转换为int,反之亦然
- 14. 将图像转换为矩阵,反之亦然?
- 15. Android从rgb转换为hsv,反之亦然
- 16. 如何将pandas DataFrame转换为字节,反之亦然?
- 17. 如何将Unix时间戳转换为DateTime,反之亦然?
- 18. 如何将矩阵转换为3D数组或反之亦然?
- 19. 如何在Java中将POJO转换为Map,反之亦然?
- 20. 使用GStreamer将wav转换为mp3(反之亦然)
- 21. 将音频,mp3文件转换为字符串,反之亦然
- 22. 如何在Qt中将QVariant转换为QString,反之亦然?
- 23. 将对象(包含lambda)转换为JSON,反之亦然
- 24. Android将对象转换为XML,反之亦然
- 25. 将对象转换为二进制代码,反之亦然
- 26. 将文件转换为短阵列,反之亦然
- 27. 转换为字节阵列,反之亦然
- 28. 如何将POJO转换为JSON,反之亦然?
- 29. 将双指针转换为单指针,反之亦然
- 30. 将字母转换为数字或反之亦然
一个问题没有任何模块化的东西。这是如何做这种转换的简单问题。 – 2017-11-29 07:49:48
答案已经被接受。 – 2017-11-29 07:52:22
如果关心模块性,这种方法会迫使DTO依赖于实体,反之亦然。而且,在多模块项目中,如果您的实体和DTO在单独的模块中(通常是这种情况),这将导致循环依赖。结帐[这个答案](https://stackoverflow.com/a/44561593/3381334) – parth 2017-11-29 14:44:20