来自客户的以下帖子
$http.post('my/url', {}); // 1
$http.post('my/url', {value: null}); // 2
我想在服务器端确定属性是否未传递(1),还是显式传递为null(2)。我能以某种方式询问泽西岛吗?
@POST
@Path('my/url')
public Response myPost(Body body) {
body.getValue(); // null in both cases
isDefined(body, 'value');
}
class Body { private String value; /*get,set omitted*/ }
如何实施isDefined
方法?泽西岛有什么样的工具吗?我会接受任何类型的语法。对于(1),它应该返回false,对于(2),它应该返回true。这可能吗?
答案 0 :(得分:1)
这很棘手......以下是我想到的两个解决方案:
您可以拥有valueDefined
之类的属性。如果调用true
方法,则其状态设置为setValue(String)
。这个解决方案适用于杰克逊。
public class Body {
private String value;
private boolean valueDefined;
public void setValue(String value) {
this.value = value;
this.valueDefined = true;
}
public String getValue() {
return value;
}
public boolean isValueDefined() {
return valueDefined;
}
}
资源方法如下:
@POST
@Path('my/url')
public Response myPost(Body body) {
boolean valueDefined = body.isValueDefined();
...
}
使用Map<String, Object>
代替Body
并检查密钥value
是否存在:
@POST
@Path('my/url')
public Response myPost(Map<String, Object> map) {
boolean valueDefined = map.containsKey("value");
...
}