MJM*_*MJM 6 java rest jax-rs jersey jackson
我正在使用Jersey JAX-RS和Jackson(用于序列化/反序列化)来实现一组REST服务.当调用者执行更新操作(例如PUT)时,我通常遵循约定,即在更新目标时忽略请求中发送的空字段.仅更新设置为实际值的字段.
但是,我更喜欢它,如果我可以区分发送为null的字段vs根本没有发送的字段,所以我知道要清除显式发送为null的字段.
我可以发明一种方法来实现这一目标,但我想知道框架中是否有任何可用的东西.这似乎是一个普遍的要求.
如果您使用 JSON POJO 支持(incom.sun.jersey.api.json.POJOMappingFeature的init 参数),那么一个简单的解决方案是在 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;
}
}
Run Code Online (Sandbox Code Playgroud)
如果该字段存在(无论值如何),杰克逊将呼叫设置者,如果该字段完全丢失,则杰克逊将忽略它。
对于基于 JAXB 的 JSON 支持,我不知道是否会调用 setter,因此可能需要编写自定义MessageBodyReader/MessageBodyWriter或JSONJAXBContext.