Я прочитал все веб-документы Spring 3: http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/spring-web.html, но не смог найти никакой интересной документации по связыванию более сложных данных запроса, для Например, предположим, что я использую JQuery, чтобы отправить к контроллеру, как так:Spring 3 MVC - Расширенное связывание данных - запрос формы со списком простых объектов
$.ajax({
url: 'controllerMethod',
type: "POST",
data : {
people : [
{
name:"dave",
age:"15"
} ,
{
name:"pete",
age:"12"
} ,
{
name:"steve",
age:"24"
} ]
},
success: function(data) {
alert('done');
}
});
Как я могу принять, что через контроллер? Предпочтительно, не создавая пользовательский объект, я бы скорее просто использовал простые типы данных, однако, если мне нужны пользовательские объекты, чтобы упростить их, я тоже в этом разбираюсь.
Для начала:
@RequestMapping("/controllerMethod", method=RequestMethod.POST)
public String doSomething() {
System.out.println(wantToSeeListOfPeople);
}
Не беспокойтесь об ответе на этот вопрос, мне все равно о обрабатывает запрос, я знаю, как иметь дело с ответами.
EDIT:
У меня есть еще пример кода, но я не могу заставить его работать, что я здесь отсутствует?
выберите 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);
}
});
метод контроллера:
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();
}
это делает следующее исключение:
org.springframework.web.HttpMediaTypeNotSupportedException: Тип содержимого «приложение/json 'не поддерживается
Если doSerialize() принимает строку, в отличие от лица, запрос успешен, но строка пуста
это работает, кажется, что если Spring справится с этим, он должен будет перейти прямо к HashMap, пропустите этого среднего человека, но ваш код работает точно так же, как напечатано – walnutmon
Я добавил редактирование наверху, которое пытается использовать решение JSON, но оно не работает, хотя и проницательность? – walnutmon
@walnutmon: Чтобы заставить его работать, вам нужно иметь библиотеку Jackson JSON Mapper (http://jackson.codehaus.org/) по пути к классам (а также ' ' в XML Spring). –
axtavt