如果密钥以下划线开头,则Web服务客户端将跳过JSON字段

时间:2015-04-19 00:49:34

标签: java json jersey-client

我使用Jersey 2.17编写了一个java REST客户端 代码如下所示:

    public <T> T query(Class<T> responseType, Result previous) {
         ...
      for(Map.Entry<String, String> entry : map.entrySet())
        webTarget = webTarget.queryParam(entry.getKey(), entry.getValue());
      return webTarget.request(MediaType.APPLICATION_JSON).get(responseType);
    }

代码正在按预期工作,除了一件事。 服务返回的JSON对象包含具有以下字段的对象列表:

...
   "_type": "Package"
   "resourceId": "nimbusnodeweb-0.0.1_20141028083104790",
   "_oid": "544f5468e4b0b148bedbcfed",
...

当我从查询方法返回对象时,那些_type和_oid属性被设置为null。问题是它们是对象标识符。 我无法弄清楚如何配置此WebTarget对象以使其理解以下划线开头的键。 我的目标java对象如下所示:

public class PackageInfo {
private String  _type;  // = "Package"
private String  resourceId;
private String  _oid;
...

我甚至为这些字段设置了两个setter

    /**
 * @param _oid the _oid to set
 */
public void setOid(String _oid) {
    this._oid = _oid;
}

/**
 * @param _oid the _oid to set
 */
public void set_oid(String _oid) {
    this._oid = _oid;
}

没有任何作用。 任何线索将不胜感激。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 显然,坐在泽西岛实施下面的杰克逊解析器不符合标准。 我使用谷歌GSON,它运作得非常好。 这是代码:

//        return webTarget.request(MediaType.APPLICATION_JSON).get(responseType);
        Gson gson = new Gson();
        Response response = webTarget.request(MediaType.APPLICATION_JSON).get();
        InputStream entity = (InputStream) response.getEntity();
        return gson.fromJson(new InputStreamReader(entity), responseType);