Обновление кода Java 9 HttpClient до Java 11: BodyProcessor и asString () - PullRequest
0 голосов
/ 28 апреля 2019

У меня есть кодовая база , которая (по-видимому) работает под Java 9, но не компилируется под Java 11. Он использует jdk.incubator.httpclient API и изменяет информацию модуля в соответствии с , этот ответ работает по большей части, но больше, чем изменился пакет.

Код, который я до сих пор исправляю, следующий:

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);
}

Ошибки компиляции:

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

Как я могу преобразовать код в эквивалентную Java 11 версию?

1 Ответ

4 голосов
/ 28 апреля 2019

Похоже, вам нужно 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);
}
...