J'ai lu tous les documents Web de Spring 3: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/spring-web.html mais je n'ai trouvé aucune documentation intéressante sur la liaison de données de requête plus complexes, par exemple exemple, disons que j'utilise jQuery pour poster un contrôleur comme ceci:Spring 3 MVC - Liaison de données avancée - Demande de formulaire avec liste d'objets simples
$.ajax({
url: 'controllerMethod',
type: "POST",
data : {
people : [
{
name:"dave",
age:"15"
} ,
{
name:"pete",
age:"12"
} ,
{
name:"steve",
age:"24"
} ]
},
success: function(data) {
alert('done');
}
});
Comment puis-je accepter que par le contrôleur? De préférence sans avoir à créer un objet personnalisé, je préférerais juste pouvoir utiliser des types de données simples, cependant si j'ai besoin d'objets personnalisés pour simplifier les choses, ça me va aussi.
Pour vous aider à démarrer:
@RequestMapping("/controllerMethod", method=RequestMethod.POST)
public String doSomething() {
System.out.println(wantToSeeListOfPeople);
}
Ne vous inquiétez pas la réponse à cette question, tout ce que je me soucie de la demande est la manipulation, je sais comment gérer les réponses.
EDIT:
J'ai un code plus d'échantillon, mais je ne peux pas le faire fonctionner, ce que je manque ici?
sélectionner javascript:
var person = new Object();
person.name = "john smith";
person.age = 27;
var jsonPerson = JSON.stringify(person);
$.ajax({
url: "test/serialize",
type : "POST",
processData: false,
contentType : 'application/json',
data: jsonPerson,
success: function(data) {
alert('success with data : ' + data);
},
error : function(data) {
alert('an error occurred : ' + data);
}
});
méthode du contrôleur:
public static class Person {
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
String name;
Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@RequestMapping(value = "/serialize")
@ResponseBody
public String doSerialize(@RequestBody Person body) {
System.out.println("body : " + body);
return body.toString();
}
cela rend l'exception suivante:
org.springframework.web.HttpMediaTypeNotSupportedException: Type de contenu « application/json 'pas pris en charge
Si la méthode doSerialize() prend une chaîne par opposition à une personne, la demande est acceptée, mais la chaîne est vide
Cela fonctionne, il semble que si Spring peut gérer cela, il devrait pouvoir aller directement à la HashMap, sauter cet homme du milieu, mais votre code fonctionne exactement comme imprimé – walnutmon
J'ai ajouté une modification en haut qui tente la solution JSON, cela ne fonctionne pas, aucune idée? – walnutmon
@walnutmon: Pour que cela fonctionne, vous devez avoir la bibliothèque Jackson JSON Mapper (http://jackson.codehaus.org/) sur le classpath (ainsi que ' ' dans le XML de Spring). –
axtavt