我有一个项目,我使用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”是一个纯资源,它不是由其他资源组成。
那么,有没有一种优雅的方式来解决这个问题?