【问题标题】:Spring Data REST updates null properties on PATCH (when it shouldn't)Spring Data REST 更新 PATCH 上的空属性(不应该)
【发布时间】:2018-05-26 03:42:12
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这确实有效(但它是否记录在任何地方?)。那么,我认为 DomainObjectMerger 与此无关?由于这个旧问题,我感到困惑:jira.spring.io/browse/DATAREST-130 非常感谢您的反馈!
    • 行为基本上是RFC7386中定义的。
    猜你喜欢
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    • 2019-11-29
    • 2015-03-07
    • 2017-03-14
    • 2018-03-31
    • 2021-01-24
    • 2014-01-29
    相关资源
    最近更新 更多