Spring Data REST 更新 PATCH 上的空属性(当它不应该时)
Spring Data REST updates null properties on PATCH (when it shouldn't)
我正在发送一个 PATCH 请求,该请求在实体的某些属性中包含空值,我发现数据库中的字段已更新,而根据规范它们不应该(部分更新)。试图了解发生了什么,我看到 DomainObjectMerger 被实例化为 @Bean 但它的合并方法从未使用过(未找到引用并且在调试模式下从未触发断点)。有人可以解释如何以及何时使用 DomainObjectMerger 吗?
编辑:我创建了一个测试失败的示例项目。该测试尝试 PATCH 传递 null 作为密码的实体,并期望密码不受影响。但它失败了,因为密码现在在数据库中为空
代码按预期运行。您的 PATCH 负载如下所示:
{"id":"bc421109-edaf-4d4f-8d4c-71b62aa4d99f","username":"alex","password":null}
这是告诉服务器清除 password
字段的值。如果您想保持密码字段不变,请确保它甚至不包含在请求有效负载中,例如通过将 ObjectMapper
配置为不呈现 null
值。
我正在发送一个 PATCH 请求,该请求在实体的某些属性中包含空值,我发现数据库中的字段已更新,而根据规范它们不应该(部分更新)。试图了解发生了什么,我看到 DomainObjectMerger 被实例化为 @Bean 但它的合并方法从未使用过(未找到引用并且在调试模式下从未触发断点)。有人可以解释如何以及何时使用 DomainObjectMerger 吗?
编辑:我创建了一个测试失败的示例项目。该测试尝试 PATCH 传递 null 作为密码的实体,并期望密码不受影响。但它失败了,因为密码现在在数据库中为空
代码按预期运行。您的 PATCH 负载如下所示:
{"id":"bc421109-edaf-4d4f-8d4c-71b62aa4d99f","username":"alex","password":null}
这是告诉服务器清除 password
字段的值。如果您想保持密码字段不变,请确保它甚至不包含在请求有效负载中,例如通过将 ObjectMapper
配置为不呈现 null
值。