Spring Data REST 更新 PATCH 上的空属性(当它不应该时)

Spring Data REST updates null properties on PATCH (when it shouldn't)

我正在发送一个 PATCH 请求,该请求在实体的某些属性中包含空值,我发现数据库中的字段已更新,而根据规范它们不应该(部分更新)。试图了解发生了什么,我看到 DomainObjectMerger 被实例化为 @Bean 但它的合并方法从未使用过(未找到引用并且在调试模式下从未触发断点)。有人可以解释如何以及何时使用 DomainObjectMerger 吗?

编辑:我创建了一个测试失败的示例项目。该测试尝试 PATCH 传递 null 作为密码的实体,并期望密码不受影响。但它失败了,因为密码现在在数据库中为空

https://github.com/otinanism/demo-rest-data

代码按预期运行。您的 PATCH 负载如下所示:

{"id":"bc421109-edaf-4d4f-8d4c-71b62aa4d99f","username":"alex","password":null}

这是告诉服务器清除 password 字段的值。如果您想保持密码字段不变,请确保它甚至不包含在请求有效负载中,例如通过将 ObjectMapper 配置为不呈现 null 值。