gpt4 book ai didi

java - Spring/JPA/Jackson 中的差异 HTTP PUT 方法

转载 作者:行者123 更新时间:2023-12-01 19:44:04 26 4
gpt4 key购买 nike

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

让我们看看 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,因为提供的实体不包含此类字段。

我想知道是否有办法运行以下操作:

  • 使用数据库上提供的 ID 加载实体
  • 更新 Json/请求正文中提供的字段。
  • 保留更新后的实体 -> 这可以按照我在代码中所示的相同方式完成。

我知道它存在 @JsonIdentity 和 @JsonIdentifyreference(alwaysAsId=true),我将它们与解析器结合使用从数据库中获取数据,以获取仅提供 ID 而不是实体本身的嵌套实体。

最佳答案

PATCH 方法是为该功能而设计的。

当您替换整​​个资源时,应使用

PUT - 这意味着在请求中未提供的字段上设置 null

PATCH 用于更新资源,您可以更新单个字段,也可以更新所有字段,您可以选择。

请注意,实际的数据库更新可能不会自动工作,只是因为您更改了 HTTP 方法。对于 Hibernate,有一个 @DynamicUpdate 提供相同的功能。如果没有 @DynamicUpdate,设置为 null 的字段将被更新,但如果使用 @DynamicUpdate,则仅更新已修改的字段。

关于java - Spring/JPA/Jackson 中的差异 HTTP PUT 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com