Saltar al contenido

RestTemplate: exchange () vs postForEntity () vs execute ()

Solución:

los RestTemplate es un objeto muy versátil.

Empecemos con execute, ya que es el método más genérico:

execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback,
        @Nullable ResponseExtractor<T> responseExtractor, Object... uriVariables)

Nota la uriVariables se puede pasar como un Map también.

execute está diseñado para ser aplicable en la mayor variedad de escenarios posible:

  • El primer y segundo parámetros permiten cualquier combinación válida de URL y método.
  • La solicitud se puede modificar de muchas formas diferentes pasando una RequestCallback (a @FunctionalInterface con un solo método doWithRequest(ClientHttpRequest request)) antes de enviarlo.
  • La respuesta devuelta desde el recurso remoto se puede deserializar de cualquier forma necesaria pasando una ResponseExtractor.

Compare esto con exchange:

exchange(String url, HttpMethod method, @Nullable HttpEntity<?> requestEntity,
         Class<T> responseType, Object... uriVariables)

Aquí hay dos diferencias importantes:

  • Ahora puede pasar un HttpEntity directamente, mientras que antes era necesario configurarlo manualmente utilizando el RequestCallback.
  • La mecánica de deserialización se proporciona de forma inmediata al pasar el tipo de respuesta deseado Class.

Como puede ver, esto es mucho más conveniente para el uso diario.

Métodos como getForEntity y postForEntity son versiones aún más breves y fáciles de entender de esto:

getForEntity(String url, Class<T> responseType, Object... uriVariables)

postForEntity(String url, @Nullable Object request, Class<T> responseType,
              Object... uriVariables)

Aviso postForEntity ahora le permite PUBLICAR cualquier Object directamente sin envoltorio. No hay ningún beneficio o detrimento en el rendimiento al usarlos en lugar de execute, como ellos llaman execute ellos mismos bajo el capó, es simplemente una cuestión de conveniencia.

RestTemplate es un sincrónico cliente para realizar solicitudes HTTP. Ofrece plantillas para escenarios comunes para cada método HTTP, además del generalizado exchange(...) y execute(...) métodos que apoyan casos menos frecuentes.

La documentación de Spring Integration resume el uso de cada método:

postForEntity

Crea un nuevo recurso a través de POST y devolver la representación de la respuesta.

exchange

Versión más generalizada y menos obstinada de los métodos anteriores que proporciona flexibilidad adicional cuando es necesario. Acepta RequestEntity, incluido el método HTTP, la URL, los encabezados y el cuerpo como entrada, y devuelve un ResponseEntity.

Estos métodos permiten el uso de ParameterizedTypeReference en lugar de Class para especificar un tipo de respuesta con genéricos.

execute

La forma más generalizada de realizar una solicitud, con control total sobre la preparación de la solicitud y la extracción de respuesta a través de interfaces de devolución de llamada.


Al final, ambos postForEntity(...), exchange(...) y execute(...) Los métodos invocarán el protegido doExecute(...) método, que realizará la solicitud HTTP real. Puede consultar el código fuente para obtener más detalles

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *