检查POST正文中是否包含属性

时间:2016-08-04 14:56:21

标签: java jersey jax-rs

来自客户的以下帖子

$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。这可能吗?

1 个答案:

答案 0 :(得分:1)

这很棘手......以下是我想到的两个解决方案:

解决方案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();
    ...
}

解决方案2

使用Map<String, Object>代替Body并检查密钥value是否存在:

@POST
@Path('my/url')
public Response myPost(Map<String, Object> map) {
    boolean valueDefined = map.containsKey("value");
    ...
}