`
jinnianshilongnian
  • 浏览: 21434970 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2405130
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:2997788
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5631528
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:257583
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1593212
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:248982
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5847622
Group-logo
跟我学Nginx+Lua开...
浏览量:698184
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:780495
社区版块
存档分类
最新评论

springmvc @RequestBody绑定泛型集合

 
阅读更多

最近有很多朋友询问 springmvc @RequestBody绑定泛型集合的问题,我把解决方案整理了一下供大家参考。

 

1、

http://ahlearns.wordpress.com/2011/07/29/spring-3-mvc-requestbody-deserialization-of-custom-list-objects/

// The wrapper class, so that type info (of User) is passed thru the message converters to Jackson
public class Users extends ArrayList<User> {
    private static final long serialVersionUID = 1L;
 
    public Users() { super(); }
}
 
// Example method from the controller:
    @RequestMapping(value="/status", method = RequestMethod.POST)
    public @ResponseBody Map<String, ? extends Object> status(@RequestBody Users users) {
        // handle the request here
    }

 

2、使用数组替代

 

3、spring 3.2 直接支持泛型集合

https://jira.springsource.org/browse/SPR-9570 

需要使用Jackson 2.0及以上 如

 <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

 

 

sprng3.2支持如List<Sample> Map<String, Sample>等集合泛型。

7
1
分享到:
评论
22 楼 月沉海雾 2013-04-08  
jinnianshilongnian 写道
你客户端代码写的不对,改成如下即可

var arr=new Array();
$(".data").each(function(i,a){
arr[i]=new Array();
var model = {};
$(a).find("input").each(function(j,b){
model[$(this).attr("name")] = $(this).attr("value");
});
arr[i] = model;
});

$.ajax({
url:"index/color",
data:JSON.stringify(arr),

type:"post",
dataType:"json",
contentType: "application/json; charset=utf-8",
cache:false,
success:function(data){},
});


非常感谢。
21 楼 jinnianshilongnian 2013-04-02  
你客户端代码写的不对,改成如下即可

var arr=new Array();
$(".data").each(function(i,a){
arr[i]=new Array();
var model = {};
$(a).find("input").each(function(j,b){
model[$(this).attr("name")] = $(this).attr("value");
});
arr[i] = model;
});

$.ajax({
url:"index/color",
data:JSON.stringify(arr),

type:"post",
dataType:"json",
contentType: "application/json; charset=utf-8",
cache:false,
success:function(data){},
});
20 楼 月沉海雾 2013-04-02  
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。

对了 你得使用
  <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

jackson2.0

     jackson2.0与spring3.2能写个例子吗,或者发个例子链接,谢谢了


没有  和1的变化

1、jar包是2的
2、使用org.springframework.web.servlet.view.json.MappingJackson2JsonView 而不是
org.springframework.web.servlet.view.json.MappingJacksonJsonView


jackson换成2.1.4了,配置文件也改成MappingJackson2JsonView,还是不行。 可以帮我看看吗


1、你做个简单demo 如果跑不通 发我

你的邮箱
19 楼 jinnianshilongnian 2013-04-01  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。

对了 你得使用
  <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

jackson2.0

     jackson2.0与spring3.2能写个例子吗,或者发个例子链接,谢谢了


没有  和1的变化

1、jar包是2的
2、使用org.springframework.web.servlet.view.json.MappingJackson2JsonView 而不是
org.springframework.web.servlet.view.json.MappingJacksonJsonView


jackson换成2.1.4了,配置文件也改成MappingJackson2JsonView,还是不行。 可以帮我看看吗


1、你做个简单demo 如果跑不通 发我
18 楼 月沉海雾 2013-04-01  
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。

对了 你得使用
  <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

jackson2.0

     jackson2.0与spring3.2能写个例子吗,或者发个例子链接,谢谢了


没有  和1的变化

1、jar包是2的
2、使用org.springframework.web.servlet.view.json.MappingJackson2JsonView 而不是
org.springframework.web.servlet.view.json.MappingJacksonJsonView


jackson换成2.1.4了,配置文件也改成MappingJackson2JsonView,还是不行。 可以帮我看看吗
17 楼 jinnianshilongnian 2013-03-30  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。

对了 你得使用
  <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

jackson2.0

     jackson2.0与spring3.2能写个例子吗,或者发个例子链接,谢谢了


没有  和1的变化

1、jar包是2的
2、使用org.springframework.web.servlet.view.json.MappingJackson2JsonView 而不是
org.springframework.web.servlet.view.json.MappingJacksonJsonView
16 楼 月沉海雾 2013-03-29  
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。

对了 你得使用
  <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

jackson2.0

     jackson2.0与spring3.2能写个例子吗,或者发个例子链接,谢谢了
15 楼 jinnianshilongnian 2013-03-26  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。

对了 你得使用
  <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView"/>

jackson2.0
14 楼 月沉海雾 2013-03-26  
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的


一开始是3.1.1,后来用的是3.2.2,我把spring的jar都换了一下。
13 楼 jinnianshilongnian 2013-03-26  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
按理说 如果你是用spring3.2 是没问题的。 确定spring3.2的
12 楼 月沉海雾 2013-03-26  
jinnianshilongnian 写道
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行

firebug里面POST有两个信息,一个就是上面名称是JSON,还有一个名称是源代码,里面内容是如下:
["{\"colorId\":2,\"colorNum\":b002,\"colorName\":海水蓝,\"colorGroup\":blue}","{\"colorId\":1,\"colorNum\":b0001,\"colorName\":天空蓝,\"colorGroup\":blue}"]
这里面有[]的。
11 楼 jinnianshilongnian 2013-03-26  
月沉海雾 写道
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"


你这个格式不对吧

[
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
,
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
]

应该这样就行
10 楼 月沉海雾 2013-03-26  
firebug POST信息
JSON
0
"{"colorId":2,"colorNum":b002,"colorName":海水蓝,"colorGroup":blue}"
1
"{"colorId":1,"colorNum":b0001,"colorName":天空蓝,"colorGroup":blue}"
9 楼 月沉海雾 2013-03-26  
前端
$.ajax({  url:"index/color/update.json",
  data:JSON.stringify(arr),....
Controller
@RequestMapping(value="/color/update.json",method = RequestMethod.POST)
    public String update(Model model ,@RequestBody List<Color> list) {...}
Model
@Component("color")
public class Color extends AbstractModel {

private static final long serialVersionUID = 1L;
@Id
private Long colorId;
private String colorNum;
private String colorName;
private String colorGroup;
        ....}
我看了下SPR-9570上面说支持List<Object>,我没看到具体的例子。刚开始学习Spring,希望大哥别嫌我磨叽啊。
8 楼 jinnianshilongnian 2013-03-26  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
我试了下第一种方法,报400错误,是不是配置文件还缺少什么?

建议直接上spring3.2   目前在用


Spring3.2.2支持List<Object>吗?如果支持直接用@RequestBody吗?

支持如List<User> 需要有泛型信息

需要有泛型信息,能解释下吗?

如 List<User> List<Model> ---> 要不然人家咋知道转换为啥类型?


我昨天试了下,好像有点问题?我Spring jar换成3.2.2后,前端提示400错误。需要我贴下代码吗?

400错误 估计你用法不对
1、贴一下 request 信息
2、贴一下 控制器方法 和 model
7 楼 月沉海雾 2013-03-26  
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
我试了下第一种方法,报400错误,是不是配置文件还缺少什么?

建议直接上spring3.2   目前在用


Spring3.2.2支持List<Object>吗?如果支持直接用@RequestBody吗?

支持如List<User> 需要有泛型信息

需要有泛型信息,能解释下吗?

如 List<User> List<Model> ---> 要不然人家咋知道转换为啥类型?


我昨天试了下,好像有点问题?我Spring jar换成3.2.2后,前端提示400错误。需要我贴下代码吗?
6 楼 jinnianshilongnian 2013-03-26  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
我试了下第一种方法,报400错误,是不是配置文件还缺少什么?

建议直接上spring3.2   目前在用


Spring3.2.2支持List<Object>吗?如果支持直接用@RequestBody吗?

支持如List<User> 需要有泛型信息

需要有泛型信息,能解释下吗?

如 List<User> List<Model> ---> 要不然人家咋知道转换为啥类型?
5 楼 月沉海雾 2013-03-26  
jinnianshilongnian 写道
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
我试了下第一种方法,报400错误,是不是配置文件还缺少什么?

建议直接上spring3.2   目前在用


Spring3.2.2支持List<Object>吗?如果支持直接用@RequestBody吗?

支持如List<User> 需要有泛型信息

需要有泛型信息,能解释下吗?
4 楼 jinnianshilongnian 2013-03-25  
月沉海雾 写道
jinnianshilongnian 写道
月沉海雾 写道
我试了下第一种方法,报400错误,是不是配置文件还缺少什么?

建议直接上spring3.2   目前在用


Spring3.2.2支持List<Object>吗?如果支持直接用@RequestBody吗?

支持如List<User> 需要有泛型信息
3 楼 月沉海雾 2013-03-25  
jinnianshilongnian 写道
月沉海雾 写道
我试了下第一种方法,报400错误,是不是配置文件还缺少什么?

建议直接上spring3.2   目前在用


Spring3.2.2支持List<Object>吗?如果支持直接用@RequestBody吗?

相关推荐

Global site tag (gtag.js) - Google Analytics