Enviar y analizar el JSON a la primavera del controlador?

Supongamos que , Si tengo la JSON datos como ,

var json = {"name":"kite Player","age":"25","hobby":"footbal"}

Me puede Enviar el JSON de datos por

var jsonData = JSON.Stringfy(json);

En JQueryAjax ,

data = jsonData ,

Puedo analizar los datos JSON en la primavera controlador,

public class TestController {
    @RequestMapping(method = RequestMethod.POST, value = "personDetails.html")
    public @ResponseBody Result math(@RequestBody final Persons persons) {

         String name = person.getName();
         String age = persons.getAge();
         String hobby = persons.getHobby();
         //Other process
    }
}

¿Cómo puedo analizar la JSON en el Spring controller, Si tengo que enviar los múltiples detalles de la persona en JSON como ,

var json = [ {"name":"kite Player","age":"25","hobby":"footbal"},  
             {"name":"Steve","age":"40","hobby":"fishing"},
             {"name":"Marker","age":"28","hobby":"cricket"}
           ]

La esperanza de nuestros miembros de la pila va a dar una buena solución.

  • El uso de una biblioteca de análisis como GSON ! El segundo caso es una matriz , cualquier JSON parser será capaz de manejarlo.
  • Necesito usar el jakson
  • por favor revise esta java2practice.wordpress.com/2013/03/14/…
InformationsquelleAutor Human Being | 2013-07-12

3 Kommentare

  1. 3

    Esto debería funcionar:

    @RequestMapping(method = RequestMethod.POST, value = "personDetails.html")
    public @ResponseBody Result math(@RequestBody List<Persons> personList) { ... }

    –EDITADO Y AÑADIDO EJEMPLO–

    He probado esta forma local y funciona para mí. Aquí el fragmento de código:

    public class TestController {
        public static class Test {                                                    
            String name;                                                                 
    
            public String getName() {                                                    
                return name;                                                                
            }                                                                            
    
            public void setName(String name) {                                           
                this.name = name;                                                           
            }                                                                            
        }                                                                             
    
    
        @RequestMapping(value = "/debug/test1.json", method = RequestMethod.POST)     
        @ResponseBody                                                                 
        public Test[] testList1(@RequestBody Test[] test) {                           
            return test;                                                                 
        }                                                                             
    
        @RequestMapping(value = "/debug/test2.json", method = RequestMethod.POST)     
        @ResponseBody                                                                 
        public List<Test> testList2(@RequestBody List<Test> test) {                   
            return test;                                                                 
        }                                                                     
    }        

    Aquí están los resultados de la prueba (he probado con curl):

        Request:
        curl --header "Content-type: application/json" --header "Accept: application/json"  --data '[{"name": "John"}, {"name": "Jack"}]' http://localhost:8080/app/debug/test1.json
        Response:
        [{"name":"John"},{"name":"Jack"}]
    
        Request:
        curl --header "Content-type: application/json" --header "Accept: application/json"  --data '[{"name": "John"}, {"name": "Jack"}]' http://localhost:8080/app/debug/test2.json
        Response:
        [{"name":"John"},{"name":"Jack"}]

    PS. Somethime es difícil obtener cualquier información de depuración en spring MVC cuando petición JSON no antes de que llegue el controlador. Para obtener la información de depuración, en algunos casos es necesario establecer el nivel de depuración de spring MVC a la traza. Yo suelo añadir esto a mi log4j.propiedades cuando tengo que comprobar por qué un JSON error de solicitud:

    log4j.logger.org.springframework.web.servlet.mvc.method.annotation=TRACE
    • La solicitud de no entrar en el controlador cuando he utilizado el @RequestBody
    • He editado mi respuesta para dar un ejemplo. ¿Recibe usted alguna excepción en el registro cuando su solicitud falla?
    • Pero no ayudó .
    • Sugiero copiar-pegar ejemplo para su proyecto, y probando con curl como se ha especificado. Lugares donde las cosas pueden ir mal, no son el envío de Contenidos de tipo y Aceptar los encabezados de jQuery, incorrecto, json, etc. Si usted puede publicar el código que has probado y con el que no funciona, y también los contenidos (con encabezados) de la petición hecha con jQuery tal vez me podrian ayudar.
  2. 0

    Puede enviar la cada uno de los miembros de detalles en un JsonObject dentro de una Matriz Json y, a continuación, se puede recorrer la matriz y conseguir que la persona objetos JSON. Usted puede ver la documentación de JSON para todos los métodos disponibles para obtener y establecer los datos.

    También le sugerimos que utilice GSON (google -json) que son la Memoria de usar. 🙂

  3. 0

    Prueba este código

    @RequestMapping(method = RequestMethod.POST, value = "personDetails.html")
    public @ResponseBody Result math(@RequestBody List< Persons > persons) {
        for (Persons person : persons) {
            String name = person.getName();
            String age = person.getAge();
            String hobby = person.getHobby();
            //Process the data
        }
    }

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea