使用Jersey 2.27和Jackson将JSON读取到Java对象

时间:2018-10-24 18:03:47

标签: java json jackson jersey client

我正在尝试为Web资源构建API包装器。我在存储返回的JSON时遇到问题。我特别感到困惑,因为我正在尝试使用最新的Jersey 2.27,并且在线上的许多可用指南适用于似乎不完全兼容的早期版本。

RESTful Web资源返回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之类的基本类型,则会收到相同的错误。

我在做什么错,在这里?如何告诉Jersey / Jackson将此JSON解析为特定类型的Java对象?

0 个答案:

没有答案