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