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
.
中修复了
我想通过发送空请求为实体设置空值。
例如:
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 版本。
PATCH request
中未指定的所有其他属性也将被“取消”。
似乎 spring-data-rest, issue-345 已经在 v2.2.x
.