将 DTO 转换为实体,反之亦然
2022-09-01 03:33:22
我正在我的Web应用程序中使用体系结构。在哪里手动将数据传输对象(DTO)转换为JPA实体,反之亦然(即不使用任何框架)?Spring MVC
JPA
我正在我的Web应用程序中使用体系结构。在哪里手动将数据传输对象(DTO)转换为JPA实体,反之亦然(即不使用任何框架)?Spring MVC
JPA
这是一个接受答案的旧问题,但想用使用模型映射器API的简单方法更新它。
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>0.7.4</version>
</dependency>
使用此 API,您可以避免手动 setter 和 getters,如已接受的答案中所述。
在我看来,这两种转换都应该在私有实用程序方法的帮助下在控制器上进行,并使用Java8流的映射(如果交换了DTO的集合),如本文所示。
它应该发生在控制器上,因为 DTO 应该是独占的传输对象。我不会把我的DTO进一步降低。
您可以在实体上对服务和数据访问层进行编码,并在调用服务方法之前将DTO转换为实体,并在从控制器返回响应之前将实体转换为DTO。
我更喜欢这种方法,因为实体很少更改,并且可以根据需要从DTO中添加/删除数据。
此处详细介绍了详细的模型映射器配置和规则
我建议另一种没有额外依赖性的方法:
import org.springframework.beans.BeanUtils
...
BeanUtils.copyProperties(sourceObject, targetObject);
可用于将 DTO 转换为实体,反之亦然,如果它们具有相同的属性类型和名称。
如果要忽略某些字段,只需将它们添加到 .targetObject
BeanUtils.copyProperties(sourceObj, targetObj, "propertyToIgnoreA", "propertyToIgnoreB", "propertyToIgnoreC");
资料来源:http://appsdeveloperblog.com/dto-to-entity-and-entity-to-dto-conversion/
我认为这是最干净的方式。请记住检查Javadoc以获取警告!