Java Spring/JPA/Jackson中的Diff-HTTP-PUT方法
我想知道使用PUT方法更新存储在DB中的实体的特定属性时的最佳实践是什么 例如,让我们看看Rest控制器上接收到的以下json:Java Spring/JPA/Jackson中的Diff-HTTP-PUT方法,java,spring-boot,jackson,spring-data-jpa,Java,Spring Boot,Jackson,Spring Data Jpa,我想知道使用PUT方法更新存储在DB中的实体的特定属性时的最佳实践是什么 例如,让我们看看Rest控制器上接收到的以下json: {"id":1, "surname":"Doe"} 我们存储的实体如下所示: public class Employee { Long id; String name; String surname; Date createdAt; Date updatedAt; } @PutRequest public Employee
{"id":1, "surname":"Doe"}
我们存储的实体如下所示:
public class Employee {
Long id;
String name;
String surname;
Date createdAt;
Date updatedAt;
}
@PutRequest
public Employee updateEmployee(@RequestBody Employee employee) {
repo.saveAndFlush(employee);
}
为了简单起见,我省略了注释
我想要实现的是,在RestController上,我收到如下内容:
public class Employee {
Long id;
String name;
String surname;
Date createdAt;
Date updatedAt;
}
@PutRequest
public Employee updateEmployee(@RequestBody Employee employee) {
repo.saveAndFlush(employee);
}
因此,如果我这样做,那么名称
和时间戳的现有字段将设置为null,因为提供的实体不包含此类字段
我想知道是否有办法运行以下操作:
- 使用DB上提供的ID加载实体
- 更新Json/请求正文中提供的字段
- 持久化更新的实体->这可以用我在代码中显示的相同方式完成
我知道它存在@JsonIdentity和@jsonidentityreference(alwaysAsId=true),我将其与解析器一起使用,从数据库中获取数据,以获取仅提供ID而不是实体本身的嵌套实体。
补丁
方法就是为该功能设计的
替换整个资源时应使用PUT
,这意味着在请求中未提供的字段上设置null
补丁
用于更新资源,您可以根据自己的选择更新单个字段或所有字段
请注意,实际的数据库更新可能不会自动工作,因为您更改了HTTP方法。对于Hibernate,有一个提供相同功能的
@DynamicUpdate
。如果没有@DynamicUpdate
,则设置为null
的字段将被更新,但如果使用@DynamicUpdate
,则仅更新修改过的字段。补丁
方法就是为该功能而设计的
替换整个资源时应使用PUT
,这意味着在请求中未提供的字段上设置null
补丁
用于更新资源,您可以根据自己的选择更新单个字段或所有字段
请注意,实际的数据库更新可能不会自动工作,因为您更改了HTTP方法。对于Hibernate,有一个提供相同功能的
@DynamicUpdate
。如果没有@DynamicUpdate
,则设置为null的字段将被更新,但是如果没有@DynamicUpdate
,则只会更新已修改的字段。更准确地说,补丁是服务器应在某些资源上应用的一组指令,以将资源的状态转换为所需状态。正如使用的提到的,这可能是很多人认为通过PUT或补丁完成部分更新的紧要关头。更确切地说,补丁是服务器在某些资源上应用的一组指令,以将资源状态转换为所需的资源。正如所提到的使用可能是关闭的事情,很多人认为部分更新完成或通过放置或修补程序。