は、私には、例えば、要求は単にやって入手非同期HTTPの結果としてFuture<Response>
を取得する方法を参照してください。Async Http ClientリクエストからCompletableFuture <T>を取得するにはどうすればよいですか? <a href="https://github.com/AsyncHttpClient/async-http-client" rel="nofollow">Async Http Client documentation</a>オン
AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();
Future<Response> f = asyncHttpClient
.prepareGet("http://api.football-data.org/v1/soccerseasons/398")
.execute();
Response r = f.get();
しかし、便宜のために、私は、代わりにCompletableFuture<T>
を取得したいと思いいる私ができるためその結果をJsonからJavaオブジェクト(たとえばSoccerSeason.java)に逆シリアル化するなど、結果を他のものに変換する継続を適用します。これは私がやりたいものです。
AsyncHttpClient asyncHttpClient = new DefaultAsyncHttpClient();
CompletableFuture<Response> f = asyncHttpClient
.prepareGet("http://api.football-data.org/v1/soccerseasons/398")
.execute();
f
.thenApply(r -> gson.fromJson(r.getResponseBody(), SoccerSeason.class))
.thenAccept(System.out::println);
Async Http Client documentationによると、これを行うための唯一の方法は、AsyncCompletionHandler<T>
オブジェクトを介してとの約束を使用しています。だから私はそのためにauxiliary methodを建て:このユーティリティメソッドで
CompletableFuture<Response> getDataAsync(String path){
CompletableFuture<Response> promise = new CompletableFuture<>();
asyncHttpClient
.prepareGet(path)
.execute(new AsyncCompletionHandler<Response>() {
@Override
public Response onCompleted(Response response) throws Exception {
promise.complete(response);
return response;
}
@Override
public void onThrowable(Throwable t) {
promise.completeExceptionally(t);
}
});
return promise;
}
を私はやって前の例を書き換えることができます。
getDataAsync("http://api.football-data.org/v1/soccerseasons/398")
.thenApply(r -> gson.fromJson(r.getResponseBody(), SoccerSeason.class))
.thenAccept(System.out::println);
は、非同期のHTTPクライアントからCompletableFuture<T>
を得るための任意のより良い方法はあります要求? AHC2で
あなたは[AHC2レポ]のReadme.md'( 'で' CompletableFuture '使用例を含むことができhttps://github.com/AsyncHttpClient/async-http-client )?私はそれが役に立つと思う。 –
歓迎です!私は本当にatmを襲った。 –