从 .readEntity 获取对象

Get object from .readEntity

我有一个 java 服务调用 API 并在 return

中获取以下内容
{
  "status": {
    "service1": {
      "available": true,
      ...
    },
    "service2": {
      "available": false,
      ...
    },
    ...
  }
}

如何使用 .readEntity(或其他东西)来获取给定字段的对象;说 service2

或者只是将 status 中的所有对象转换为 List<> 个对象

String output = response.readEntity(String.class); 有效,但我不知道如何将它正确解析为有用的东西,因为我不想在字符串中搜索

import javax.ws.rs.client.Client;
import javax.ws.rs.core.Response;

Response response = client
        .target(url)
        .request()
        .get();

String output = response.readEntity(String.class);

您可以使用 POJO 对数据建模并使用它来提取数据。您发布的 JSON 模型可能类似于

public static class ResponseData {
    private Map<String, Service> status;

    // getters and setters

    public static class Service {
        private boolean available;

        // getters and setters
    }
}

getter 和 setter 应该使用 JavaBean naming convention。然后确保您有 JSON 提供商,例如 Jackson

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>${jersey2.version}</version>
</dependency>

现在您可以简单地将 POJO class 传递给 readEntity() 方法,它会将 JSON 反序列化到您的 POJO class.

ResponseData resData = res.readEntity(ResponseData.class);
Service service2 = resData.getStatus().get("service2");

有关建模 JSON 的更多详细信息,您可以 Google 搜索“data binding with Jackson”