La liaison de la imbriquée json à @RequestBody objet à l'aide de Jackson convertisseur

J'ai deux classes

public class Parent {
    private String name;
    private int age;
    private ArrayList<Child> children = new ArrayList<Child>();
    //Setters and getter to follow..
}

public Class Child {
    private String name;
    private int age;
}

Printemps config comprend:

<bean id="jsonMessageConverter"
    class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />

<bean
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jsonMessageConverter" />
        </list>
    </property>
</bean>  

Contrôleur se présente comme suit:

@RequestMapping(value = "/parents", 
                method = RequestMethod.POST, 
                headers="Content-Type=application/json")
public @ResponseBody Parent add(@RequestBody Parent parent, Model model) {

    logger.debug("Received request to add a parent");
    Parent tempParent = parentService.add(parent); //This will persist the parent object to the DB.. (Helper class)
    return tempContract;
}

Dans une des circonstances normales, il est conseillé de lier les entrants json pour le Parent et le retour de la Mère comme un Json dans la réponse. Et il me l'exception: "La requête envoyée par le client est syntaxiquement incorrect." avec l'entrée suivants Json:

{
    "name" : "foo",
    "age" : "45",
    "children" : [ 
      {
         "name" : "bar",
         "age" : "15""
      },
      {
         "name" : "baz",
         "age" : "10""        
      }
    ]
} 

Donc essayé de changer le json et il fonctionne très bien la liaison de deux @RequestBody et @ResponseBody avec les formats suivants:

{
    "name" : "foo",
    "age" : "45",
    "children" : []
}

et

{
    "name" : "foo",
    "age" : "45",
    "children" : [ 
      {}
    ]
} 

Donc je suis en supposant qu'il existe quelque chose de mal biding le véritable enfant de la classe ou avec la façon dont je suis de passage de l'objet Json wrt objet Enfant. Quelqu'un pourrait s'il vous plaît aidez-moi à sortir d'ici. Aussi, est-il suggéré d'utiliser

 private ArrayList<HashMap<String, Child>> children = new ArrayList<HashMap<String, Child>>();

au lieu de

private ArrayList<Child> children = new ArrayList<Child>();

Merci.

OriginalL'auteur user845730 | 2011-07-15