关于springMVC 接收json字符串集合的问题
来源:互联网 发布:淘宝金牌买家的信用分 编辑:程序博客网 时间:2024/09/21 08:46
关于springMVC 接收json字符串集合的问题(二)
在第一章的时候我们已经讲过将json转为字符串的格式传到后台这样给我们开发来说这样有很多麻烦,所以我们可以直接传入json对象的格式,将对象交给jackson来处理,这样直接交给了我们声明的Bean来管理,jackson是一个很强大的将对象转为 对应实体类 或者 Map 对象的开源jar。
通俗的来说,Jackson是一个 Java 用来处理 JSON 格式数据的类库,其性能非常好。本文就来针对Jackson的用法做一个较为详细的实例分析。具体如下:
一、简介
Jackson具有比较高的序列化和反序列化效率,据测试,无论是哪种形式的转换,Jackson > Gson > Json-lib,而且Jackson的处理能力甚至高出Json-lib近10倍左右,且正确性也十分高。相比之下,Json-lib似乎已经停止更新,最新的版本也是基于JDK15,而Jackson的社区则较为活跃。
下面,结合实例来对Jackson的用法进行简单介绍。
二、使用
Jackson提供了很多类和方法,而在序列化和反序列化中使用的最多的类则是ObjectMapper这个类,此类比较类似于Json-lib中JsonObject和ArrayObject。此类中提供了readTree(),readValue(),writeValueAsString()等方法用于转换。具体关于此类的说明文档地址是:http://jackson.codehaus.org/1.7.9/javadoc/org/codehaus/jackson/map/ObjectMapper.html。
为了避免重复描述,下面中所涉及到的objectMapper均是来至于ObjectMapper objectMapper = new ObjectMapper()。下面将按照序列化和反序列化两个方面来简单介绍用法。
1.序列化
① 对java自带类进行序列化
测试例子
List list=new ArrayList();list.add(1);list.add(2);list.add(3);实现序列化:
String teststringlist=objectMapper.writeValueAsString(list);System.out.println(teststringlist);在控制台输出的结果是:
[1,2,3]
②对自定义类的序列化
public class student {private int age=10;private String name="hhh"; public String[] list={"hao","haouhao","keyi"}; public Date time=new Date(); public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
为使例子更具有通用性,此类中包含了值类型int,引用类型String,String[],还包含了日期类型Date。
实现序列化
student st=new student();String teststringstu=objectMapper.writeValueAsString(st);System.out.println(teststringstu);输出:
{"list":["hao","haouhao","keyi"],"time":1375429228382,"name":"hhh","age":10}
2. 反序列化
①一次性反序列化
json字符串
String test1="{"objectID":357,"geoPoints":[{"x":504604.59802246094,"y":305569.9150390625}]}"
此时我们需要定义一个实体Bean
public class testJsonClass { public int objectID; public List geoPoints=new ArrayList();}
然后利用下面段代码将Json反序列化到此类中:
testJsonClass testClass= objectMapper.readValue(test1, testJsonClass.class);
②渐次反序列化 针对复杂的json字符串 比如类里面包含list 集合 实体类等
复杂的json字符串
String test="{"results":[{"objectID":357,"geoPoints":[{"x":504604.59802246094,"y":305569.9150390625}]},{"objectID":358,"geoPoints":[{"x":504602.2680053711,"y":305554.43603515625}]}]}";
JsonNode node= objectMapper.readTree(test); //将Json串以树状结构读入内存JsonNode contents=node.get("results");//得到results这个节点下的信息for(int i=0;i<contents.size();i++) //遍历results下的信息,size()函数可以得节点所包含的的信息的个数,类似于数组的长度{System.out.println(contents.get(i).get("objectID").getIntValue()); //读取节点下的某个子节点的值JsonNode geoNumber=contents.get(i).get("geoPoints");for(int j=0;j<geoNumber.size();j++) //循环遍历子节点下的信息{System.out.println(geoNumber.get(j).get("x").getDoubleValue()+" "+geoNumber.get(j).get("y").getDoubleValue());}}
三.总结
Jackson关于Json的操作主要如上所示,其方法使用起来很便利,而且也很灵活,即提供了一次性完成的操作,也提供了可以按需读取信息的操作。并且Jackson的功能很齐全,可以对序列化和反序列化进行多种细节的控制,例如注解功能和对于Hibernate的延迟注入功能以及设置时间格式功能等,因为这些功能目前不太需要,所以仔细研究留待以后。同时,Jackson还支持对XML的一系列序列化和反序列化的操作,其思路与解析Json的大致相同。
对于Jackson目前的缺点,网上有人测试所比Json-lib更占内存一些。而利用空间换时间,一般是值得的。
下面继续我们在前端接口中怎样传递json对象到后台直接进行Bean的组装。
具体实体
在页面上发送一个post请求到我们的后台接口中 发送方式为post 需要注意的一点是 要指定传递的类型
contentType:"application/json",
<script type="text/javascript">$(document).ready(function() {var data1 = { "username":"张三", "book":{ "name":"1231322", "date_":"2012-12-01 12:01:00" }};$.ajax({type: "post",url: "/test",contentType:"application/json", dataType: "json",async : true,data: data1,success: function(data) {console.info(data)}});});</script>
后台接口方式 需要注意一下两点:如果传递的是对象的话 要是用 @RequestBody 注解的方式 进行注入,如果想要返回前台数据的话要是用@ResponseBody 可以放到方法上也可以直接加到类上面
@ResponseBody@RequestMapping(value = "/test")public ModelAndView login(HttpServletRequest req,@RequestBody UserBean user) {ModelAndView mv = new ModelAndView();UserBean u = loginServiceImpl.Login(user.getUsername(),user.getPassword());if (u != null) {req.getSession().setAttribute("user", u);mv.addObject("password", u.getPassword());}mv.setViewName("index");return mv;}
在这里 我直接返回了一个视图。具体的UserBean
public class UserBean implements Serializable {private static final long serialVersionUID = -2682305557890221059L;private Integer id;private String username;private String password;private Double account;private String books;private book book;private List<book> booklist;public book getBook() {return book;}public void setBook(book book) {this.book = book;}public void setBooks(String books) {System.out.println(books);this.books = books;}public UserBean() {super();// TODO Auto-generated constructor stub}public UserBean(Integer id, String username, String password, Double account) {super();this.id = id;this.username = username;this.password = password;this.account = account;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Double getAccount() {return account;}public void setAccount(Double account) {this.account = account;}public String getBooks() {return books;}public List<book> getBooklist() {return booklist;}public void setBooklist(List<book> booklist) {this.booklist = booklist;}@Overridepublic String toString() {return "UserBean [account=" + account + ", id=" + id + ", password="+ password + ", username=" + username + "]";}}
book 类
public class book {private int id;private String name;private String page;private Date date_;public Date getDate_() {return date_;}public void setDate_(Date date_) {this.date_ = date_;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPage() {return page;}public void setPage(String page) {this.page = page;}}
这样既可 ,但是上方传入date类型会出现一个类型转换异常,因为jackson 只支持几种方式 具体解决办法可以查看我的博客
点击打开链接 http://blog.csdn.net/preferg/article/details/78035830
- 关于springMVC 接收json字符串集合的问题
- 关于springMVC 接收json字符串集合的问题
- json格式与SpringMvc接收json列表的问题
- springMVC接收json串问题
- SpringMVC 接收页面Post提交的json字符串并解析
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- SpringMVC @RequestBody接收Json对象字符串
- Java编辑练习
- 黑裙安装-yellowcong
- 862C C. Mahmoud and Ehab and the xor XOR操作/构造
- 小米管培面试经历
- mysql jdbc 连接池配置
- 关于springMVC 接收json字符串集合的问题
- 【模板】埃氏筛
- Java内存分析 其一
- 剑指offer66题(1-6)
- Java练习
- 基于SpringAop操作日志实现
- 汽车机油的作用及分类、标号和级别的知识
- linux死锁检测与调试
- Linux用户和用户组相关文件