我有一个名为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);
答案 0 :(得分:0)
You actually need different objects for the task
我认为您混淆了DTO(数据传输对象)和DO(数据对象)的概念,DTO将数据从业务逻辑传输到前端,DO在其中持久化。因此,通常您永远不会将DTO映射到DB列,这是DO的工作
另一个建议,如果您想完成相同班级的任务。
将数据从UserDTO复制到用户实体时,请跳过提交的 id
您甚至可以删除用户实体中提交的 id 的设置器(如果ORM没有问题)