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

时间:2017-12-12 12:39:08

标签: spring spring-data spring-data-jpa spring-data-rest spring-hateoas

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

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

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

1 个答案:

答案 0 :(得分:3)

代码按预期工作。您的PATCH有效负载如下所示:

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

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