java 使用HttpResponse.BodyHandlers.OfString()后的响应类型

iecba09b  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(185)
class Main{
    //we can use class HttpClient 
    //https://www.youtube.com/watch?v=5MmlRZZxTqk

    public static void main(String args[]) throws IOException, InterruptedException {    
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
        // .GET() this line is optional because it is default
        .header("accept","application/json")
        .uri(URI.create("https://whatever.com"))
        .build();
        HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
        System.out.println(response.statusCode());
        System.out.println(response.body()); 
        System.out.println(response.getClass().getName());
    }
}

所以我读了BodyHandlers.ofString()方法的文档,我的理解是它会把响应变量的值解析成一个字符串。

System.out.println(response.getClass().getName());

结果是jdk.internal.net.http.HttpResponseImpl?我读到另一篇文章说,永远不要在idk.internal.* 中使用任何类,那么我做错了什么吗?

wlsrxk51

wlsrxk511#

我做错什么了吗
这里没有任何错误,HttpResponse是接口,所以response.getClass()可以返回任何实现HttpResponse的实现(在本例中是HttpResponseImpl)。
我读过另一篇文章,上面说永远不要在idk. internal中使用任何类。*
这意味着你不应该直接在你的代码中声明/初始化这个类。例如,你不应该写这样的东西:

HttpResponseImpl<String> response;

背后的原则是我们应该依赖于接口,而不是实现细节,更多细节可以在JEP 260中找到

相关问题