Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
¿Es posible incluir un cuerpo de solicitud en una solicitud GET utilizando Spring WebClient?

Sé que enviar un cuerpo con una solicitud GET no es la mejor idea, pero estoy tratando de consumir una API existente que lo requiere.

Enviar un cuerpo con POST es sencillo:

 webClient.post() .uri("/employees") .body(Mono.just(empl), Employee.class) .retrieve() .bodyToMono(Employee.class);

Sin embargo, no funcionará con webClient.get() , porque mientras que el método post() devuelve WebClient.RequestBodyUriSpec , el método get() devuelve WebClient.RequestHeadersUriSpec<?> , que no parece permitir ninguna definición de cuerpo.

Encontré una solución para Spring RestTemplate aquí: RestTemplate get with body , pero no tuve suerte para encontrar ninguna para el nuevo WebClient.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Una solicitud GET no tiene cuerpo. Está prohibido (bueno, no está prohibido, pero no se usa en absoluto) por la especificación HTTP. Tienes dos enfoques aquí:

  • Haz un POST. Está ahí solo para eso.
  • Use una cadena de consulta y pase los datos en esa parte de la URL.

Por supuesto, puede adjuntar los campos necesarios y pasar una carga útil a la solicitud GET, pero probablemente será ignorada o, peor aún, identificada como un error y rechazada por el servidor, antes de que su código servido tenga acceso a ella. Pero si está pasando datos al servidor para hacer algún procesamiento con ellos, entonces POST es lo que necesita usar.

Extraído de RFC-7231. HTTP 1.1. Semántica y código:

Una carga útil dentro de un mensaje de solicitud GET no tiene una semántica definida; enviar un cuerpo de carga útil en una solicitud GET puede hacer que algunas implementaciones existentes rechacen la solicitud.

(el marcado es mío)

Las razones para esto son, principalmente, que un método GET debe ser idempotente, produciendo la misma salida para la misma URL, si se repite. POST no tiene estos requisitos, por lo que POST es tu amigo.

over 4 years ago · Santiago Trujillo Denunciar

0

Me encontré en una situación similar y, si bien las otras respuestas son correctas, no debe usar un cuerpo con una solicitud GET que no es útil cuando no posee o no puede cambiar el método ya existente al que está llamando.

El problema es que WebClient#get devuelve un WebClient.RequestHeadersUriSpec que no nos proporciona una forma de configurar el cuerpo. 1

WebClient#post devuelve un WebClient.RequestBodyUriSpec que nos brinda una forma de configurar el cuerpo, pero nos hará usar el método HTTP incorrecto, POST en lugar de GET.

Afortunadamente para nosotros atrapados en esta situación, hay WebClient#method que devuelve un WebClient.RequestBodyUriSpec y nos permite configurar el método HTTP.

 webClient.method(HttpMethod.GET) .uri("/employees") .body(Mono.just(empl), Employee.class) .retrieve() .bodyToMono(Employee.class);

Sin embargo, aún puede tener problemas en sus bibliotecas de prueba ...

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda