6

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

但是,如果我可以区分作为 null 发送的字段与根本未发送的字段,我会更喜欢它,因此我知道要清除明确发送为 null 的字段。

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

4

1 回答 1

2

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

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;
    }
}

如果该字段存在(无论值如何),Jackson 将调用 setter,如果该字段完全丢失,则将忽略它。

对于基于 JAXB 的 JSON 支持,我不知道是否会调用 setter,因此可能需要编写 custom MessageBodyReader/ MessageBodyWriters 或JSONJAXBContext.

于 2013-05-26T13:27:30.810 回答