Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

196
Views
¿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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!