Клиент веб-службы пропускает поля JSON, если ключ начинается с подчеркивания

Я написал клиент java REST, используя Jersey 2.17. Код выглядит так:

    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;
...

Я даже поставил два сеттера для этих полей

    /**
 * @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;
}

Ничего не работает. Любые подсказки будут высоко оценены.


person Gary Greenberg    schedule 19.04.2015    source источник


Ответы (1)


Я нашел решение. Судя по всему, синтаксический анализатор Джексона, который находится под реализацией Джерси, не на должном уровне. Я использовал 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);
person Gary Greenberg    schedule 20.04.2015