这可能看起来很疯狂,但我遇到了JAX-RS部分JSON请求的问题。例如,假设我们有一个实体:
public class Data {
private String a;
private String b;
private Integer c;
/* this is flat and large object with many fields */
}
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Path("/data")
public Response updateData(Data d) {
/* update database */
}
现在我想让用户更新一些字段。所以用户发送这样的请求:
{ "a": "data of field a" }
这意味着只更新字段" a"。当用户想要设置字段" a"为null,他将发送{ "a": null }
。问题是在服务器端,我无法决定客户是否想要设置字段&#34; a&#34;为null或没有字段&#34; a&#34;因此,我不应该触及字段&#34; a&#34;(在这两种情况下&#34; a&#34;将为空)。一种解决方案是阅读Map<String, Object>
而不是Data
。通过这种方式,我可以区分这两种情况,但我会松散bean验证框架,而且我应该进行大量的类型转换(Object
到String/Integer/List<Integer>
)。有没有简洁的方法来处理这种部分更新请求?我在Jetty上使用Jersey 2.9和Jackson 2.3。