Skip to content

Instantly share code, notes, and snippets.

@mchernyavskaya
Created September 5, 2018 13:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save mchernyavskaya/89f505a5dc37559bf986fee588a3c439 to your computer and use it in GitHub Desktop.
Save mchernyavskaya/89f505a5dc37559bf986fee588a3c439 to your computer and use it in GitHub Desktop.
gist for response entity with future
@RequestMapping("/async/user/{name}")
public CompletableFuture<ResponseEntity<ClientResponse>> findUserAsync(@PathVariable(value = "name") String name) {
long start = System.currentTimeMillis();
CompletableFuture<ResponseEntity<ClientResponse>> result = new CompletableFuture<>();
ClientResponse clientResponse = new ClientResponse();
ListenableFuture<ResponseEntity<ServerResponse>> entity = asyncRestTemplate.getForEntity(
BASE_URL + name, ServerResponse.class);
entity.addCallback(new ListenableFutureCallback<ResponseEntity<ServerResponse>>() {
@Override
public void onFailure(Throwable ex) {
clientResponse.setError(true);
clientResponse.setCompletingThread(Thread.currentThread().getName());
clientResponse.setTimeMs(System.currentTimeMillis() - start);
result.complete(ResponseEntity.status(HttpStatus.ACCEPTED).body(clientResponse));
}
@Override
public void onSuccess(ResponseEntity<ServerResponse> entity) {
clientResponse.setData(entity.getBody());
clientResponse.setCompletingThread(Thread.currentThread().getName());
clientResponse.setTimeMs(System.currentTimeMillis() - start);
result.complete(ResponseEntity.status(HttpStatus.ACCEPTED).body(clientResponse));
}
});
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment