对于来自客户端的以下帖子
$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。这有可能吗?
发布于 2016-08-04 15:37:38
这很棘手..。下面是我脑海中浮现的两个解决方案:
解决方案1
你可以有一个像valueDefined
这样的属性。如果调用setValue(String)
方法,则其状态设置为true
。该解决方案适用于Jackson。
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();
...
}
解决方案2
使用Map<String, Object>
代替Body
,并检查密钥value
是否存在:
@POST
@Path('my/url')
public Response myPost(Map<String, Object> map) {
boolean valueDefined = map.containsKey("value");
...
}
https://stackoverflow.com/questions/38770825
复制相似问题