Bul*_*aza -4 java json java-9 java-http-client java-11
我有一个代码库(显然)可以在下运行,Java 9但不能在下编译Java 11。它使用jdk.incubator.httpclientAPI并根据此答案更改模块信息在大多数情况下都有效,但不仅仅是软件包已更改。
我仍然无法解决的代码如下:
private static JSONObject sendRequest(JSONObject json) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest httpRequest = HttpRequest.newBuilder(new URI(BASE_URL))
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.timeout(TIMEOUT_DURATION)
.POST(HttpRequest.BodyProcessor.fromString(json.toString()))
.build();
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandler.asString());
String jsonResponse = httpResponse.body();
return new JSONObject(jsonResponse);
}
Run Code Online (Sandbox Code Playgroud)
编译错误为:
Error:(205, 94) java: cannot find symbol
symbol: method asString()
location: interface java.net.http.HttpResponse.BodyHandler
Error:(202, 34) java: cannot find symbol
symbol: variable BodyProcessor
location: class java.net.http.HttpRequest
Run Code Online (Sandbox Code Playgroud)
如何将代码转换为等效Java 11版本?
像你看起来需要HttpResponse.BodyHandlers.ofString()作为替代HttpResponse.BodyHandler.asString(),并HttpRequest.BodyPublishers.ofString(String)作为替代HttpRequest.BodyProcessor.fromString(String)。(旧的Java 9文档,在这里。)
您的代码将如下所示
private static JSONObject sendRequest(JSONObject json) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest httpRequest = HttpRequest.newBuilder(new URI(BASE_URL))
.header("Accept", "application/json")
.header("Content-Type", "application/json")
.timeout(TIMEOUT_DURATION)
.POST(HttpRequest.BodyPublishers.ofString(json.toString()))
.build();
HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());
String jsonResponse = httpResponse.body();
return new JSONObject(jsonResponse);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
367 次 |
| 最近记录: |