gpt4 book ai didi

Spring 3 MVC - 高级数据绑定(bind) - 带有简单对象列表的表单请求

转载 作者:行者123 更新时间:2023-12-04 17:41:08 24 4
gpt4 key购买 nike

我已经阅读了所有 Spring 3 Web 文档:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/spring-web.html但是完全找不到任何关于绑定(bind)更复杂的请求数据的有趣文档,例如,假设我使用 jQuery 发布到这样的 Controller :

$.ajax({
url: 'controllerMethod',
type: "POST",
data : {
people : [
{
name:"dave",
age:"15"
} ,
{
name:"pete",
age:"12"
} ,
{
name:"steve",
age:"24"
} ]
},
success: function(data) {
alert('done');
}
});

我怎样才能通过 Controller 接受呢?最好不必创建自定义对象,我宁愿能够使用简单的数据类型,但是如果我需要自定义对象来使事情变得更简单,我也可以。

为了让你开始:
@RequestMapping("/controllerMethod", method=RequestMethod.POST)
public String doSomething() {
System.out.println( wantToSeeListOfPeople );
}

不要担心这个问题的响应,我只关心处理请求,我知道如何处理响应。

编辑:

我有更多示例代码,但我无法让它工作,我在这里错过了什么?

选择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);
}
});

Controller 方法:
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: Content type 'application/json' not supported



如果 doSerialize() 方法采用 String 而不是 Person,则请求成功,但 String 为空

最佳答案

您的 jQuery ajax 调用产生以下 application/x-www-form-urlencoded请求正文(以 % 解码形式):

people[0][name]=dave&people[0][age]=15&people[1][name]=pete&people[1][age]=12&people[2][name]=steve&people[2][age]=24

Spring MVC 可以将用数字索引的属性绑定(bind)到 List s 和用字符串索引到 Map 的属性s。您在此处需要自定义对象,因为 @RequestParam不支持复杂类型。所以你有了:
public class People {
private List<HashMap<String, String>> people;

... getters, setters ...
}

@RequestMapping("/controllerMethod", method=RequestMethod.POST)
public String doSomething(People people) {
...
}

您还可以在发送数据之前将数据序列化为 JSON,然后使用 @RequestBody ,正如 Bozho 建议的那样。您可以在 mvc-showcase sample 中找到这种方法的示例。 .

关于Spring 3 MVC - 高级数据绑定(bind) - 带有简单对象列表的表单请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3566201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com