我的应用程序使用java.net.http.HttpClient
连接到互联网资源。
我希望它要么连接并工作,要么抛出异常-这就是它似乎总是工作的方式。
然而,通过查看日志,我可以看到另一个用户,它既没有,也没有返回HttpResponse
和null
body
。作为参考,它运行在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()可以为空,所以你应该检查一下。