Чтение JSON в объект Java с помощью Джерси 2.27 и Джексона - PullRequest
0 голосов
/ 24 октября 2018

Я пытаюсь создать оболочку API для веб-ресурса.У меня проблемы с хранением возвращаемого файла JSON.В частности, у меня много путаницы, потому что я пытаюсь использовать новейшую версию Jersey 2.27, и большая часть доступных руководств в Интернете предназначена для более ранних версий, которые, как представляется, не полностью совместимы.

Веб-сайт RESTfulресурс возвращает JSON;класс Company сделан для его получения.

Вот что у меня есть.Зависимости:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>2.27</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.inject</groupId>
  <artifactId>jersey-hk2</artifactId>
  <version>2.27</version>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>2.27</version>
</dependency>

Код:

import org.glassfish.jersey.client.JerseyClientBuilder;
import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJsonProvider;

public class OpenCorpAPIClient {

  private final String BASE_URL = ...;
  private final String API_PARAM = ...;

  private final String api_key;
  private Client client;

  public APIClient(String api_key) {
    this.api_key = api_key;

    client = JerseyClientBuilder.newClient()
            .register(new JacksonJsonProvider())
            .register(JacksonFeature.class);
  }

  public Company getCompany(String resource_uri) {

    WebTarget target = client.target(BASE_URL)
            .path(resource_uri)
            .queryParam(API_PARAM, api_key);

    Response response = target.request(MediaType.APPLICATION_JSON_TYPE)
            .get();

>>  return response.readEntity(Company.class);
  }

Вот ошибка, которую я получаю при компиляции.Расположение ошибки выделено в приведенном выше коде.

[ERROR] /opt/path/to/Project/src/main/java/package/name/APIClient.java:[107,24] cannot find symbol
  symbol:   method readEntity(java.lang.Class<com.pwc.kyv.opencorp.Company>)
  location: variable response of type javax.ws.rs.core.Response

Объект Response имеет функцию readEntity(Class<T> entityType), которую я пытаюсь вызвать.В этом отношении, если я изменю вызов на базовый тип, такой как String, я получу ту же ошибку.

Что я делаю не так, здесь?Как я могу сказать Джерси / Джексону проанализировать этот JSON как определенный тип объекта Java?

...