如何使用bean验证进行JAX-RS部分更新

时间:2014-06-03 18:34:04

标签: java json jersey jackson jax-rs

这可能看起来很疯狂,但我遇到了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" }

这意味着只更新字段&#34; a&#34;。当用户想要设置字段&#34; a&#34;为null,他将发送{ "a": null }。问题是在服务器端,我无法决定客户是否想要设置字段&#34; a&#34;为null或没有字段&#34; a&#34;因此,我不应该触及字段&#34; a&#34;(在这两种情况下&#34; a&#34;将为空)。一种解决方案是阅读Map<String, Object>而不是Data。通过这种方式,我可以区分这两种情况,但我会松散bean验证框架,而且我应该进行大量的类型转换(ObjectString/Integer/List<Integer>)。有没有简洁的方法来处理这种部分更新请求?我在Jetty上使用Jersey 2.9和Jackson 2.3。

0 个答案:

没有答案