【问题标题】:How to map HttpResponse in a Object Java如何在 Java 对象中映射 HttpResponse
【发布时间】:2021-08-11 15:20:15
【问题描述】:

我正在通过 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 对象中映射响应?首先将其作为字符串拦截是否正确?另外,我需要传递一个字符串作为路径参数,但我不知道在哪里添加它。

感谢支持!!

【问题讨论】:

    标签: java json rest get httpclient


    【解决方案1】:

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

    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

    【讨论】:

    • 我应该如何将字符串作为路径参数传递?
    • 路径参数通过代码的.uri(URI.create(endpoint)) 部分传入。例如,使用名为exampleId 的路径参数,您的代码将如下所示.uri(URI.create("http://example.com/examples/ + exampleId))
    【解决方案2】:

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

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

    2. 困难:您可以编写自己的HttpResponse.BodyHandler&lt;MyObject&gt;,它将响应转换为MyObject

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

    【讨论】:

      猜你喜欢
      • 2018-11-02
      • 2016-07-30
      • 2019-04-07
      • 2018-08-13
      • 1970-01-01
      • 2018-01-06
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多