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
Vous devez vous connecter pour publier un commentaire.
La mise à jour du JSON exemple dans la question est toujours valide. Je vous recommandons de vérifier JSON avec des exemples JSONLint.com.
Qui suit est un exemple de l'utilisation de Jackson pour désérialiser une version corrigée du JSON dans le même Parent/Enfant, la structure de classe dans la version actuelle de la question.
Est-il possible que le message sur l'erreur de syntaxe est juste que: un message sur une erreur de syntaxe? Plus précisément, à propos de la invalid JSON entrée? Ou est le vrai JSON valide de fait, et seulement les exemples de la question ne sont pas valides?
Pas. La structure JSON ne correspond pas
ArrayList<HashMap<String, Child>>
. Donc, je ne voudrais pas essayer de l'utiliser.OriginalL'auteur Programmer Bruce
On serait en première suppose que la divagation des guillemets après 15 et 10 de l'âge des enfants. Ce qui est de la génération de votre entrée?
OriginalL'auteur Affe
Le problème a été résolu par l'ajout d'en-dessous de la logique.
Ici votre classe Java DrugListJsonRequest devrait s'étendre
On n'a pas besoin de toutes les méthodes et les constructeurs.
OriginalL'auteur Murthy