¿Cómo podemos hacer asíncrona llamada a la API REST en Java?

user10937286:

Estoy usando la primavera RestTemplate y quiero hacer una llamada a otro servicio que no devuelve ningún cuerpo de la respuesta. Por lo tanto, yo no quiero esperar la respuesta. Por lo tanto, es sólo dispara y olvida, y continuar con el resto del código. Estoy pensando en la creación de un nuevo hilo para hacer esto, pero realmente no está seguro de cuál es el enfoque correcto.

Gal Naor:

El enfoque correcto es ejecutar el asíncrona con una devolución de llamada (utilizando DeferredResult , como esto (suponiendo que tenemos una clase someClassque queremos recuperar de la API:

@GetMapping(path = "/testingAsync")
public DeferredResult<String> value() throws ExecutionException, InterruptedException, TimeoutException {
   AsyncRestTemplate restTemplate = new AsyncRestTemplate();
   String baseUrl = "http://someUrl/blabla";
   HttpHeaders requestHeaders = new HttpHeaders();
   requestHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
   String value = "";

   HttpEntity entity = new HttpEntity("parameters", requestHeaders);
   final DeferredResult<String> result = new DeferredResult<>();
   ListenableFuture<ResponseEntity<someClass>> futureEntity = restTemplate.getForEntity(baseUrl, someClass.class);

   futureEntity.addCallback(new ListenableFutureCallback<ResponseEntity<someClass>>() {
      @Override
      public void onSuccess(ResponseEntity<someClass> result) {
         System.out.println(result.getBody().getName());
         result.setResult(result.getBody().getName());
      }

      @Override
      public void onFailure(Throwable ex) {
         result.setErrorResult(ex.getMessage());
      }
  });

  return result;
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=335824&siteId=1
Recomendado
Clasificación