最近学习extjs4,服务器端用springmvc,但在springmvc解析extjs传来的json数据时总是找不到好的解决办法
录我进行指添加或指修改时,往后台传的json数据如下(取名为jsonStr)
{"records": [{"id":"dfds","name":"fsdf","email":"sdf34ds"},
{"id":"dfdsf","name":"fsdf","email":"sdf334ds"}]}
本来想让后台springmvc在controller类的方法参数中使用@RequestBody自动解析成java对象的集合:List<User> 。可总是不能如愿,如果我extjs向后台传送的json数组没有records,只是单纯的{[{"id":"dfds","name":"fsdf","email":"sdf34ds"},
{"id":"dfdsf","name":"fsdf","email":"sdf334ds"}]}
则可用@RequestBody List<User> 处理。后台想到直接把前台传进的json数据当成字符串手动解析,也比较麻烦
代码:
ObjectMapper mapper = new ObjectMapper();
mapper.readValue(jsonStr,Map.class);
也不能直接转换为List<User> ,因为map.get(key)得到的只是List<LinkedHashMap>而不是User对象集合,
后来想到用JsonNode, 一个一个地斌值,代码如下:
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = null;
try {
rootNode = objectMapper.readValue(records, JsonNode.class);
JsonNode recordsNode = rootNode.path("records");
} catch (JsonParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JsonMappingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// // System.out.println("recordsNode==>"+recordsNode);
List<String> names = recordsNode.findValuesAsText("name");
List<String> emails = recordsNode.findValuesAsText("email");
List<String> ids = recordsNode.findValuesAsText("id");
for(int i=0; i<ids.size(); i++){
User user = new User();
user.setId(System.currentTimeMillis()+"");
user.setName(names.get(i));
user.setEmail(emails.get(i));
data.add(user);
貌似太繁锁了
后来google一下,有位老兄说可以这样配置
public @ResponseBody String create(@RequestBody EntityData<User> datas);
EntityData的代码如下:package com.wanghaisheng.controller;
import java.util.List;
public class EntityData<T> {
private List<T> records;
public List<T> getRecords() {
return records;
}
public void setRecords(List<T> records) {
this.records = records;
}
}
一切OK,spring真的太智能了。
不过,看似我错了,自动装配后,此时List中的对象好像还是LinkedHashMap而不是User对象
分享到:
相关推荐
springmvc对json支持
jackson-databind-2.4.2.jar jackson-core-2.4.2.jar jackson-annotations-2.4.0.jar
springmvc+hibernate+extjs4mvc 权限管理springmvc+hibernate+extjs4mvc 权限管理springmvc+hibernate+extjs4mvc 权限管理
用springmvc框架简单实现json返回
简单的案例小程序,采用springmvc+mybatis+extjs+ireport的方式,项目中包含mysql初始化脚本,可参考学习。
做了一个简单的springmvc+ibatis+extjs的例子,接下来我还会继续的完善它,我用tomcat的端口是8088,你要改一下, email:lingo169@yahoo.com
SpringMVC第7讲:json支持
Spring+SpringMVC+MyBatis返回json所需jar包,SSM返回json数据,jackson包
框架采用springMvc 、mybatis、前端页面采用Extjs。基于权限管理。
使用SpringMvc注解+mybatis整合Extjs5.0做的后台管理框架,其中实现了用户管理的用户信息列表获取功能,其余的由于涉及到具体项目所以剔除了!
学习SpringMVC处理JSON数据的具体实现和基本原理,同时会使用HttpMessageConverter
406等异常所缺少三个json的jar包分别是: jackson-annotations-2.4.1.jar jackson-core-2.4.1.jar jackson-databind-2.4.1.3.jar
springMVC3,hibernate3,Extjs json,spring注解,oracle,表自动生成
SpringMVC利用Ajax,JQuery交互Json
Springmvc 解析json所需jar包
其中包括jackson-annotations-2.8.7.jar,jackson-core-2.8.7.jar,jackson-databind-2.8.7.jar
用户Spring mvc Jackson自动转化的支持
使用SpringMvc注解+mybatis整合Extjs5.0做的后台管理框架,其中实现了用户管理的用户信息列表获取功能,以及用户添加功能,主键用uuid实现,其余的由于涉及到具体项目所以剔除了!
用来解决SpringMVC+Ajax技术中前台报406的错误信息,实现后台json格式与前台一致
使用springMVC+ajax+json的一个小demo,希望对读者有用