如何在对象中映射 HttpResponse Java

How to map HttpResponse in a Object Java

我正在通过 HttpClient 进行 GET REST 调用:

HttpClient client = HttpClient.newHttpClient();

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create(endpoint))
    .GET()
    .header("Authorization", authHeader)
    .header("Content-Type", "application/json")
    .build();

HttpResponse<String> response = client.send(
    request, HttpResponse.BodyHandlers.ofString());

如何映射 MyObject 对象中的响应?首先将其作为字符串拦截是否正确?另外,我需要传递一个字符串作为路径参数,但我不知道在哪里添加它。

感谢支持!!

有多种方法可以解决您的问题。

  1. 最简单:使用 Gson,它可以将 JSON 响应自动映射到给定的对象类型(而不是 theJsonString,您还可以传递 InputStream 或类似的):
Gson gson = new GsonBuilder().create();
gson.fromJson(theJsonString, MyObject.class);
  1. 中:你做的已经是正确的了。您只需要解析 String 就可以得到 MyObject.

  2. 困难:您可以编写自己的 HttpResponse.BodyHandler<MyObject>,将响应转换为 MyObject

如果您能够使用外部库,请务必使用 Gson 或类似的库。

另一个常用的库是 Jackson ObjectMapper。使用 ObjectMapper,您可以将主体映射到这样的对象:

String json = response.body(); // "{ \"name\" : \"Nemo\", \"type\" : \"Fish\" }";
Animal nemo = objectMapper.readValue(json, Animal.class);

有关分步指南,请参阅 https://www.baeldung.com/jackson-object-mapper-tutorial#2-json-to-java-object