将JSON映射到DTO

时间:2020-03-12 10:11:02

标签: java spring

我有一个名为User的DTO,其中有一个字段userFirstName,userLastName。此外,我还有一个名为UserEntity的实体,它具有字段id,userFirstName,userLastName。我的JSON有效负载中没有id字段,因为它将自动生成,因此,JSON字段将如何映射到UserDTO。我也无法从UserDTO中删除id字段,因为我正在使用同一userDTO类来显示需要在JSON中显示id属性的用户列表。 POST和GET请求类型的USERDTO类相同,在POST请求中,我们不在JSON正文中发送id属性,而在GET响应中,我们需要id属性 我的实体类:

    @Entity
    @Table(name = "usr")
    public class User implements Serializable {
    public User() {
     }

     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "id")
     private Long id;

     @Column(name = "firstName")
     private String userFirstName;

     @Column(name = "lastName")
     private String userLastName;


    // fields with getters / setters for all the fields.
     }

我的DTO课程 公共类UserDTO {

       private Long id;

       private String userFirstName;

       private String userLastName;
      }

JSON POST请求:

  {
  "userFirstName":"testuserFirstName",
  "userLastName":"testuserLastName",

   }

这是我对用户列表执行GET请求时想要看到的响应:

  {
   "id":1,
  "userFirstName":"testuserFirstName",
  "userLastName":"testuserLastName",

   }
POST请求的控制器类方法中的

代码段

          UserDTO requestPayloadData = gson.fromJson(json, UserDTO.class);

1 个答案:

答案 0 :(得分:0)

You actually need different objects for the task

我认为您混淆了DTO(数据传输对象)和DO(数据对象)的概念,DTO将数据从业务逻辑传输到前端,DO在其中持久化。因此,通常您永远不会将DTO映射到DB列,这是DO的工作


另一个建议,如果您想完成相同班级的任务。

  • 请勿填充您的实体对象USER的 id 字段

将数据从UserDTO复制到用户实体时,请跳过提交的 id

您甚至可以删除用户实体中提交的 id 设置器(如果ORM没有问题)

相关问题