Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring/JPA/Jackson中的Diff-HTTP-PUT方法_Java_Spring Boot_Jackson_Spring Data Jpa - Fatal编程技术网

Java Spring/JPA/Jackson中的Diff-HTTP-PUT方法

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

我想知道使用PUT方法更新存储在DB中的实体的特定属性时的最佳实践是什么

例如,让我们看看Rest控制器上接收到的以下json:

{"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或补丁完成部分更新的紧要关头。更确切地说,补丁是服务器在某些资源上应用的一组指令,以将资源状态转换为所需的资源。正如所提到的使用可能是关闭的事情,很多人认为部分更新完成或通过放置或修补程序。