Saltar al contenido

Intentando usar Spring Boot REST para leer JSON String desde POST

Solución:

Creo que la forma más sencilla / práctica de consumir JSON es usar una clase Java que se parezca a su JSON: https://stackoverflow.com/a/6019761

Pero si no puede usar una clase Java, puede usar una de estas dos soluciones.

Solución 1: puedes hacerlo recibiendo un Map<String, Object> desde su controlador:

@RequestMapping(
    value = "/process", 
    method = RequestMethod.POST)
public void process(@RequestBody Map<String, Object> payload) 
    throws Exception {

  System.out.println(payload);

}

Usando su solicitud:

curl -H "Accept: application/json" -H "Content-type: application/json" 
-X POST -d '{"name":"value"}' http://localhost:8080/myservice/process

Solucion 2: de lo contrario, puede obtener la carga útil POST como String:

@RequestMapping(
    value = "/process", 
    method = RequestMethod.POST,
    consumes = "text/plain")
public void process(@RequestBody String payload) throws Exception {

  System.out.println(payload);

}

Luego, analice la cadena como desee. Tenga en cuenta que debe especificarse consumes = "text/plain" en su controlador. En este caso debe cambiar su solicitud con Content-type: text/plain:

curl -H "Accept: application/json" -H "Content-type: text/plain" -X POST 
-d '{"name":"value"}' http://localhost:8080/myservice/process

Para agregar a la solución de Andrea, si está pasando una matriz de JSON, por ejemplo

[
    {"name":"value"},
    {"name":"value2"}
]

Luego, deberá configurar Spring Boot Controller así:

@RequestMapping(
    value = "/process", 
    method = RequestMethod.POST)
public void process(@RequestBody Map<String, Object>[] payload) 
    throws Exception {

    System.out.println(payload);

}

Para recibir Json arbitrario en Spring-Boot, simplemente puede usar Jackson JsonNode. El convertidor apropiado se configura automáticamente.

    @PostMapping(value="/process")
    public void process(@RequestBody com.fasterxml.jackson.databind.JsonNode payload) {
        System.out.println(payload);
    }
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *