GET llamada con cuerpo de solicitud - Solicitud cuerpo no puede acceder al controlador

vineeth:

Estoy tratando de hacer una llamada get con la petición del cuerpo (JSON) como la lista de orden de parámetro excede el límite. Soy capaz de enviar la solicitud a través del cartero / insomnio y la solicitud está llegando hasta el controlador sin ningún error. Pero el "requstBody" está vacía en el controlador. Lo que estoy perdiendo aquí?

@GET
@Path("\path")
@Consumes(APPLICATION_JSON)
@Produces(APPLICATION_JSON)
public Response getResponse(String requestBody) throws IOException { }

Cuando reemplacé @GET con @POST, requestBody tiene valor. Para la llamada GET qué tenemos que añadir algo más?

Hamid Ghasemi:

Hay dos maneras para el envío de parámetros en un HTTP Getmétodo. PathVariabley RequestParam. De esta manera, los parámetros enviados son visibles en la URL de solicitud. por ejemplo:

www.sampleAddress.com/countries/{parameter1}/get-time?city=someValues

En la solicitud anterior, parameter1es una variable de ruta y parameter2es un parámetro de petición. Por lo tanto un ejemplo de una dirección URL válida sería:

www.sampleAddress.com/countries/Germany/get-time?city=berlin

Para acceder a estos parámetros en un controlador de Java, es necesario definir un nombre específico para los parámetros. Por ejemplo el siguiente controlador recibirá este tipo de solicitudes:

@GetMapping(value = "/countries/{parameter1}/get-time", produces = "application/json; charset=utf-8")
public String getTimeOfCities(
    @PathVariable(value = "parameter1") String country,
    @RequestParam(value = "city") String city
){
    return "the method is not implemented yet";
}

Usted es capaz de enviar RequestBodya través de una Getpetición, pero si lo hace estará de acuerdo con este enlace.

Sí, puede enviar un cuerpo con GET, y no, nunca es útil hacerlo.

Esta elaboración en la página web elasticsearch es muy bonita:

El HTTP bibliotecas de ciertos idiomas (sobre todo de JavaScript) no permiten peticiones GET para tener un cuerpo de la petición. De hecho, algunos usuarios están sorprendidos de que las solicitudes GET se les permite siempre tener un cuerpo.

La verdad es que el RFC 7231-RFC que se ocupa de la semántica y el contenido HTTP-no define lo que debería ocurrir a una solicitud GET con un cuerpo! Como resultado, algunos servidores HTTP lo permiten, y algunos, especialmente el almacenamiento en caché proxy-no.

Si desea utilizar Postel método, usted es capaz de tener RequestBodytambién. En el caso de que desee enviar datos por una solicitud posterior, un controlador adecuado sería la siguiente:

@PostMapping(value = "/countries/{parameter1}/get-time", produces = "application/json; charset=utf-8")
public String getTimeOfCitiesByPost(
        @PathVariable(value = "parameter1") String country,
        @RequestParam(value = "city") String city,
        @RequestBody Object myCustomObject

){
    return "the method is not implemented yet";
}

myCustomObjectpodría tener cualquier tipo de datos que ha definido en el código. Tenga en cuenta que de esta manera, usted debe enviar solicitud cuerpo como una Jsoncadena.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=223096&siteId=1
Recomendado
Clasificación