弹簧MVC补丁方法:部分更新
我有一个项目,我正在使用Spring MVC + Jackson来构建REST服务。假设我有以下 java 实体
public class MyEntity {
private Integer id;
private boolean aBoolean;
private String aVeryBigString;
//getter & setters
}
有时,我只想更新布尔值,我不认为发送整个对象及其大字符串只是更新一个简单的布尔值是一个好主意。因此,我考虑使用 PATCH HTTP 方法仅发送需要更新的字段。因此,我在控制器中声明以下方法:
@RequestMapping(method = RequestMethod.PATCH)
public void patch(@RequestBody MyVariable myVariable) {
//calling a service to update the entity
}
问题是:我如何知道哪些字段需要更新?例如,如果客户端只想更新布尔值,我将得到一个带有空“aVeryBigString”的对象。我怎么知道用户只想更新布尔值,但不想清空字符串?
我已经通过构建自定义URL“解决了”这个问题。例如,以下 URL:POST /myentities/1/aboolean/true 将映射到仅允许更新布尔值的方法。此解决方案的问题在于它不符合 REST 标准。我不想100%符合REST,但我对提供自定义URL来更新每个字段感到不舒服(特别是考虑到当我想更新多个字段时它会导致问题)。
另一种解决方案是将“MyEntity”拆分为多个资源,然后只更新这些资源,但我觉得这没有意义:“MyEntity”是一个普通的资源,它不是由其他资源组成的。
那么,有没有一种优雅的方法来解决这个问题呢?