Spring data-rest: 通过 PATCH 请求设置空值

Spring data-rest: set null value by PATCH request

我想通过发送空请求为实体设置空值。

例如:

PATCH: "{deleteDate: null}" to http://localhost/api/entity/1

但是没用。

我找到 here 补丁请求处理方式的信息:

  • An new instance of Foo is created
  • Foo is populated with all values that have been sent with the request
  • The Foo entity with the id provided by the URI is loaded
  • All properties that differ between the two objects are copied from the new Foo to the persisted Foo, unless the value is null in the new Foo.

我是否理解正确,无法通过对 spring-data-rest 服务 API 的 PATCH 请求将值设置为 NULL?

在Spring中,PATCH 方法中的上下文空值意味着没有变化。 如果你想写空值你可以

1) 使用PUT方法;
2) 实现你自己的 DomainObjectMerger class,你可以在其中扩展方法 merge with condition like

sourceValue != targetValue;

3) 使用DomainObjectMerger.NullHandlingPolicy配置。
取决于您的 Spring 数据 REST 版本。

中的所有 3 个选项都将解决所描述的问题,但还有另一个:

  • PATCH request 中未指定的所有其他属性也将被“取消”。

似乎 spring-data-rest, issue-345 已经在 v2.2.x.

中修复了