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

新手上路,请多包涵

我在我的 Web 应用程序中使用 Spring MVC 架构和 JPA 。在哪里手动将数据传输对象 (DTO) 转换为 JPA 实体,反之亦然(即不使用任何框架)?

原文由 xyz 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 907
2 个回答

我想你问的是在哪里编写整个实体–>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

    }

}

原文由 NIrav Modi 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一个已接受答案的老问题,但想通过使用模型映射器 API 的简单方法来更新它。

 <dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>0.7.4</version>
</dependency>

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

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

它应该发生在控制器上,因为 DTO 是专有的传输对象。我不会进一步降低我的 DTO。

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

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

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

原文由 Sabir Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题