Java 将JSON映射到DTO

Java 将JSON映射到DTO,java,spring,Java,Spring,我有一个名为User的DTO,其中包含userFirstName、userLastName字段。我还有一个名为UserEntity的实体,其中包含id、userFirstName、userLastName字段。我的JSON负载中没有id字段,因为它将自动生成,那么JSON字段将如何映射到UserDTO。我也不能从UserDTO中删除id字段,因为我使用同一个UserDTO类来显示需要在JSON中显示id属性的用户列表。我如何在POST和GET请求类型中使用同一个UserDTO类,而在POST请求

我有一个名为User的DTO,其中包含userFirstName、userLastName字段。我还有一个名为UserEntity的实体,其中包含id、userFirstName、userLastName字段。我的JSON负载中没有id字段,因为它将自动生成,那么JSON字段将如何映射到UserDTO。我也不能从UserDTO中删除id字段,因为我使用同一个UserDTO类来显示需要在JSON中显示id属性的用户列表。我如何在POST和GET请求类型中使用同一个UserDTO类,而在POST请求中,我们不在JSON正文和GET中发送id属性我们需要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);

任务实际上需要不同的对象

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


另一个建议是,如果你想用相同的类完成任务

  • 不要填充实体对象用户的id字段
将数据从UserDTO复制到用户实体时,跳过id字段


您甚至可以删除用户实体中id字段的setter(如果ORM没有问题)

GET没有正文。如何为GTE请求提供请求json?这是请求类型GET的json响应问题是什么?如何为POST和GET中所示的两个不同json使用相同的USERDTO?我已更新了问题@Jason。请检查我现在没有将DTO映射到DB列,因为我有alr我只是将JSON映射到DTO,然后使用modelmapper将DTO字段映射到实体以在database@Gitesh您正在使用相同的DTO..来显示一些用户列表..,正如您在问题陈述中提到的。@Gitesh在填充列表时使用不同的DO对象,表单Database@Gitesh增加了另一种方法我的答案是h。结帐。希望有帮助!。否则让我们讨论更多!如果你同意,我们可以在私人聊天中讨论??