使用Jersey JAX-RS时,有没有办法区分发送为null的字段和根本没有发送的字段?

时间:2013-05-21 22:03:12

标签: java rest jersey jackson jax-rs

我正在使用Jersey JAX-RS和Jackson(用于序列化/反序列化)来实现一组REST服务。当调用者执行更新操作(例如PUT)时,我通常遵循约定,即在更新目标时忽略请求中发送的空字段。仅更新设置为实际值的字段。

但是,我更喜欢它,如果我可以区分发送为null的字段与根本没有发送的字段,那么我知道要清除显式发送为null的字段。

我可以发明一种方法来实现这一目标,但我想知道框架中是否有任何可用的东西。这似乎是一个普遍的要求。

1 个答案:

答案 0 :(得分:2)

如果您在com.sun.jersey.api.json.POJOMappingFeature中使用JSON POJO支持(init参数trueweb.config),那么一个简单的解决方案是在您的POJO上安装“智能设置器”:

class MyBean {
    private String foo;
    private String bar;
    private boolean fooSet;

    public String getFoo() {
        return this.foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
        this.fooSet = true;
    }

    public String getBar() {
        return this.bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

    public boolean isFooSet() {
        return this.fooSet;
    }
}

如果场地存在(无论价值如何),杰克逊将召唤二传手,如果场地完全丢失,杰克逊将忽略它。

对于JAXB Based JSON support我不知道是否会调用setter所以可能需要编写自定义MessageBodyReader / MessageBodyWriter或{{3}的特殊形式}。