如果键以下划线开头,Web 服务客户端将跳过 JSON 字段
Web service client skipping JSON fields if key starts with underscore
我使用 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 属性设置为空。问题是它们是对象标识符。
我无法弄清楚如何配置此 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;
}
没有任何效果。
任何线索将不胜感激。
我找到了解决方案。
显然,位于 Jersey 实现之下的 Jackson 解析器达不到标准。
我使用了 Google 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);
我使用 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 属性设置为空。问题是它们是对象标识符。 我无法弄清楚如何配置此 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;
}
没有任何效果。 任何线索将不胜感激。
我找到了解决方案。 显然,位于 Jersey 实现之下的 Jackson 解析器达不到标准。 我使用了 Google 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);