Adiós RestTemplate, nuevas características de Spring 6.1: RestClient ¡para descubrirlo!

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 WebClientel que tiene una API fluida RestTemplate. Por lo tanto, RestClientnuestra misión es eliminar a los de 14 años RestTemplate.

Acerca de WebClienty 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 RestClientcomenzar rápidamente con él.

RestClientel 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 WebClientsimilar a . RestTemplateNo 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 toEntityel método para devolver uno más general ResponseEntitypara 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. RestClientTambié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 Petun 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 RestClientcuando se reciben los códigos de estado 4xx y 5xx . RestClientExceptionPara esta acción, podemos onStatusanularla 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 requestinformación y también pueden manipular responsela 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 exchangemétodo aquí para personalizar la lógica de procesamiento compleja.

resumen

Creo que todos RestTemplateestá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 RestClientcompensará esta deficiencia y WebClientse 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!

Bienvenido 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.

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 11
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/didispace/blog/10089093
Recomendado
Clasificación