java.net.http.HttpClient -为什么HttpResponse.主体为空?



我的应用程序使用java.net.http.HttpClient连接到互联网资源。

我希望它要么连接并工作,要么抛出异常-这就是它似乎总是工作的方式。

然而,通过查看日志,我可以看到另一个用户,它既没有,也没有返回HttpResponsenullbody。作为参考,它运行在Amazon Corretto 11.0.13上。

我无法复制这个,从查看文档和代码来看,它不清楚如何或为什么会发生这种情况。

应用程序正在做的一个例子:

try {
final HttpResponse<InputStream> response = HttpClient.newHttpClient().send(HttpRequest.newBuilder(new URI(
"https://api.cognitive.microsofttranslator.com/languages?api-version=3.0&scope=translation")).GET()
.build(), BodyHandlers.ofInputStream());
try (BufferedReader reader = new BufferedReader(new InputStreamReader(response.body()))) {
reader.lines().forEach(System.out::println);
}
} catch (IOException | InterruptedException | URISyntaxException e) {
e.printStackTrace();
}

并记录了以下错误:

java.lang.NullPointerException
at java.base/java.io.Reader.<init>(Reader.java:167)
at java.base/java.io.InputStreamReader.<init>(InputStreamReader.java:109)

InputStreamReader构造函数中的错误提示response.body()返回null

显然,我可以捕获NullPointerException,但是没有上下文关于发生了什么问题,这在试图解决连接问题时导致问题。

还有其他连接正常但无法从服务器获得期望的内容的情况。您应该检查http响应状态码并采取相应的行动。

正如你所看到的response.body()可以为空,所以你应该检查一下。

最新更新