1. ホーム
  2. java

[解決済み] JAVAで非同期HTTPリクエストを作成するには?

2023-05-13 06:23:26

質問

私はJavaにかなり慣れていないので、これは一部の人にとって明白に思えるかもしれません。私はActionScriptでたくさん仕事をしてきました。これは非常にイベントベースで、私はそれが大好きです。最近、POST リクエストを行う小さな Java コードを書こうとしましたが、それが同期リクエストであるため、コードの実行はリクエストが完了するか、タイムアウトまたはエラーが表示されるまで待機するという問題に直面しました。

コードが実行を継続し、HTTP リクエストが完了したときにコールバックが呼び出される、非同期リクエストを作成するにはどうしたらよいでしょうか。私はスレッドをちらっと見ましたが、それはやりすぎだと思います。

どのように解決するのですか?

java11 では、新しい HTTP api が提供されていることに注意してください。 HttpClient を使用した完全な非同期操作をサポートするようになり、Java の 補完可能な未来 .

また、同期バージョンもサポートしており、以下のような呼び出しが可能です。 を送る のような呼び出しもサポートしており、これは同期的です。 sendAsync で、これは非同期です。

非同期リクエストの例(apidocから引用)。

   HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://example.com/"))
        .timeout(Duration.ofMinutes(2))
        .header("Content-Type", "application/json")
        .POST(BodyPublishers.ofFile(Paths.get("file.json")))
        .build();
   client.sendAsync(request, BodyHandlers.ofString())
        .thenApply(HttpResponse::body)
        .thenAccept(System.out::println);