Spring数据休息:通过PATCH请求设置空值

时间:2015-01-09 11:02:02

标签: java spring rest spring-data

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

例如:

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

但它不起作用。

我找到了here有关如何处理PATCH请求的信息:

  
      
  • 创建了一个新的Foo实例
  •   
  • Foo中填充了随请求一起发送的所有值
  •   
  • 加载了由URI提供的id的Foo实体
  •   
  • 两个对象之间不同的所有属性都会从新的Foo复制到持久的Foo,除非新Foo中的值为null。
  •   

我是否正确理解使用PATCH请求spring-data-rest服务API无法将值设置为NULL?

2 个答案:

答案 0 :(得分:6)

在Spring上下文中,PATCH方法中的空值表示没有更改。 如果你想写空值,你可以

1)使用PUT方法;
2)实现您自己的DomainObjectMerger类,您可以在其中使用

等条件扩展方法合并
sourceValue != targetValue;

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

答案 1 :(得分:1)

https://stackoverflow.com/a/37206768/6078466中的所有3个选项都将解决所描述的问题,但会有另一个问题:

PATCH request中未指定的所有其他属性也将是nullified

似乎已在v2.2.x修复了https://jira.spring.io/browse/DATAREST-345