En la versión Spring 6.1 M2 recientemente lanzada, se introdujo un nuevo cliente HTTP síncrono: RestClient
. Hágales saber a los desarrolladores de Spring en una frase RestClient
: como WebClient
el que tiene una API fluida RestTemplate
. Por lo tanto, RestClient
nuestra misión es eliminar a los de 14 años RestTemplate
.
Acerca de WebClient
y RestTemplate
, se presentó en detalle en el artículo de varios métodos de consumo de servicios (RestTemplate, WebClient, Feign) . Si tiene una cierta comprensión, puede RestClient
comenzar rápidamente con él.
RestClient
el caso
Echemos un vistazo rápido a algunos casos oficiales RestClient
.
Solicitud HTTP
A continuación se muestra la solicitud GET más simple que devuelve una cadena. A partir de este ejemplo, podemos ver que el formulario API es WebClient
similar a . RestTemplate
No es tan problemático como solía ser .
RestClient restClient = RestClient.create();
String result = restClient.get()
.uri("https://example.com")
.retrieve()
.body(String.class);
System.out.println(result);
Con respecto a las solicitudes GET, muchas veces devolvemos no solo cadenas, sino también algunas entidades; al mismo tiempo, a veces necesitamos obtener códigos de estado HTTP e información de encabezado. En este momento, podemos usar toEntity
el método para devolver uno más general ResponseEntity
para operaciones posteriores, como las siguientes:
ResponseEntity<String> result = restClient.get()
.uri("https://example.com")
.retrieve()
.toEntity(String.class);
System.out.println("Response status: " + result.getStatusCode());
System.out.println("Response headers: " + result.getHeaders());
System.out.println("Contents: " + result.getBody());
A nivel empresarial, para poder analizar los datos empresariales de forma más cómoda. RestClient
También se admite la conversión de objetos en el resultado. Por ejemplo, el siguiente ejemplo convierte los datos JSON devueltos por la solicitud HTTP en Pet
un objeto. Esto ahorra a los desarrolladores la molestia de obtener manualmente el contenido de ResponseEntity y luego convertir los mensajes.
int id = ...
Pet pet = restClient.get()
.uri("https://petclinic.example.com/pets/{id}", id)
.accept(APPLICATION_JSON)
.retrieve()
.body(Pet.class);
Es similar para otras solicitudes, como la siguiente solicitud POST:
Pet pet = ...
ResponseEntity<Void> response = restClient.post()
.uri("https://petclinic.example.com/pets/new")
.contentType(APPLICATION_JSON)
.body(pet)
.retrieve()
.toBodilessEntity();
manejo de errores
De forma predeterminada, se genera una subclase RestClient
cuando se reciben los códigos de estado 4xx y 5xx . RestClientException
Para esta acción, podemos onStatus
anularla con un método, como el siguiente:
String result = restClient.get()
.uri("https://example.com/this-url-does-not-exist")
.retrieve()
.onStatus(HttpStatusCode::is4xxClientError, (request, response) -> {
throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders())
})
.body(String.class);
El ejemplo anterior se envuelve y vuelve a lanzar. Por supuesto, también puede hacer algunas otras operaciones comerciales.
Intercambio de procesamiento avanzado
Basta con mirar el siguiente ejemplo:
Pet result = restClient.get()
.uri("https://petclinic.example.com/pets/{id}", id)
.accept(APPLICATION_JSON)
.exchange((request, response) -> {
if (response.getStatusCode().is4xxClientError()) {
throw new MyCustomRuntimeException(response.getStatusCode(), response.getHeaders());
}
else {
Pet pet = convertResponse(response);
return pet;
}
});
El método de intercambio proporciona una entrada de procesamiento de solicitudes más flexible y completa. Aquí, los desarrolladores pueden obtener request
información y también pueden manipular response
la información. Por lo tanto, si tiene una lógica de procesamiento compleja y el método de solicitud de la sección anterior no puede satisfacer sus necesidades, puede usar el exchange
método aquí para personalizar la lógica de procesamiento compleja.
resumen
Creo que todos RestTemplate
están familiarizados con él, pero se estima que no hay muchas aplicaciones prácticas, y más clientes usarán otros clientes para implementar llamadas HTTP. Lo que Spring 6.1 lanzará ahora RestClient
compensará esta deficiencia y WebClient
se complementará al mismo tiempo. ¡Bueno, eso es todo por el estudio de hoy! Si encuentra dificultades en el proceso de aprendizaje? ¡Puede unirse a nuestro grupo de intercambio de tecnología Spring de súper alta calidad , participar en intercambios y debates, y aprender y progresar mejor! ¡Se puede hacer clic directamente en más tutoriales de Spring Boot! ¡Bienvenido a soporte favorito y reenviado!
RustDesk 1.2: uso de Flutter para reescribir la versión de escritorio, compatible con la supuesta fuga de arquitectura del modelo GPT-4 de Wayland: contiene 1,8 billones de parámetros, utilizando un modelo experto mixto (MoE) Musk anunció el establecimiento de la empresa xAI deepin V23 adaptó con éxito las afirmaciones del proyecto WSL CentOS " Abierto a todos" Rust 1.71.0 Stable Release React ¿Está teniendo un momento Angular.js? Microsoft lanza una nueva fuente predeterminada, Aptos, para reemplazar CalibriMicrosoft : aumentar los esfuerzos para usar la versión Rust IntelliJ IDEA 2023.1.4 en Windows 11Bienvenido a prestar atención a mi cuenta oficial: Programador DD. Conozca las últimas noticias de la industria por primera vez, comparta productos secos técnicos en profundidad y obtenga recursos de aprendizaje de alta calidad.