【发布时间】:2019-06-06 07:26:24
【问题描述】:
我想知道在使用 PUT 方法更新存储在 DB 中的实体的特定属性时,最佳做法是什么。
让我们看看 Rest Controller 接收到的以下 json 示例:
{"id":1, "surname":"Doe"}
我们存储的实体看起来像这样:
public class Employee {
Long id;
String name;
String surname;
Date createdAt;
Date updatedAt;
}
为了简单起见,我省略了注释。
我想要实现的是在 RestController 上我收到这样的信息:
@PutRequest
public Employee updateEmployee(@RequestBody Employee employee) {
repo.saveAndFlush(employee);
}
因此,如果我这样做,那么 name 和时间戳的现有字段将设置为 null,因为提供的实体不包含此类字段。
我想知道是否有办法运行以下操作:
- 使用 DB 上提供的 ID 加载实体
- 更新 Json/请求正文中提供的字段。
- 保持更新的实体 -> 这可以按照我在代码中显示的相同方式完成。
我知道它存在 @JsonIdentity 和 @JsonIdentifyreference(alwaysAsId=true) ,我将它们与解析器一起使用以从数据库中获取数据以获取仅提供 ID 而不是实体本身的嵌套实体。
【问题讨论】:
标签: java spring-boot jackson spring-data-jpa