有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

http如何使用Java 11 HttpClient和Jackson将JSON响应映射到Java类?

我是Java11HttpClient的新手,想尝试一下。我有一个返回JSON的简单GET请求,我想将JSON响应映射到一个名为Questionnaire的Java类

我知道我可以将响应转换成字符串或类似的输入流

HttpRequest request = HttpRequest.newBuilder(new URI(String.format("%s%s", this.baseURI, "/state")))
          .header(ACCEPT, APPLICATION_JSON)
          .PUT(noBody()).build();

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

如何编写将JSON字符串转换为以下问卷类的内容

HttpResponse<Questionnaire> response = this.client.send(request, HttpResponse.BodyHandlers./* what can I do here? */);

我使用Jackson将JSON转换为Java类实例。Jackson是否支持新的Java标准HttpClient

更新1 我不够精确,抱歉。我正在寻找一个拦截的例子。我知道http://openjdk.java.net/groups/net/httpclient/recipes.html#jsonGet


共 (1) 个答案

  1. # 1 楼答案

    如果你同意包含依赖项,请查看Methanol(免责声明:我是该库的作者)。该库为object mapping提供了特殊的BodyHandler实现。您可以通过安装jackson adapter来添加JSON支持

    var request = MutableRequest.GET("https://example.com")
        .header("Accept", "application/json");
    
    var modelResponse = client.send(request, MoreBodyHandlers.ofObject(Model.class));
    
    // Use TypeRef<T> for complex types
    var modelListResponse = client.send(request, MoreBodyHandlers.ofObject(new TypeRef<List<Model>>() {}));