springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用
springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用
主要内容:
这篇文章主要是总结之前使用springmv接收json的时候遇到的问题,下面通过前台发送ajax数据后天springmvc接收,总结springmvc接收并处理ajax的问题。
注意点:
1、前台发送ajax数据时必须设置的属性:
contentType='application/json' 如果不设置,后台获取到的将是url编码的文本,该属性是指定发送的数据的类型为json。
2、本文后台使用fastjson解析json
一、后台接收json数据以及fastjson的使用:
json对象
jsp
function fun(){
$.ajax({
url:'/testAjax.action',
data:"{'name':'xujie','age':'25'}",
type:'POST',
dataType:'json',
contentType:'application/json'
})
}
contentType:'application/json' //告诉服务器我发送的是json格式数据
dataType:'json',//告诉服务器,我要接收的是json格式数据
Controller
直接获取对象中的属性
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(@RequestBody String jsonstr){
JSONObject jsonObject = JSONObject.parseObject(jsonstr);//将json字符串转换成json对象
String age = (String) jsonObject.get("age");//获取属性
System.out.println(age);
}
封装到某个pojo中:
@RequestMapping(value = "/testAjax.action",method = RequestMethod.POST)
@ResponseBody
public String testAjax(@RequestBody String jsonstr){
Person person = JSONObject.parseObject(jsonstr, Person.class);//将json字符串转换成json对象
System.out.println(person);
return "200";
}
输出

json数组
Controller
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(@RequestBody String jsonstr){
JSONArray array = JSONObject.parseArray(jsonstr);
JSONObject jsonObject = JSONObject.parseObject(array.get(0).toString());
String name = (String) jsonObject.get("name");
System.out.println(name); //获取到了第一个对象的name
}
jsp
function fun(){
$.ajax({
url:'/testAjax.action',
data:"[{'name':'xujie','age':'25'},{'name':'yuanxiliu','age':'20'}]",
type:'POST',
dataType:'json',
contentType:'application/json'
})
}
输出

二、后台发送json数据:
1、通过springmvc的注解@ResponseBody 示例:
List/map
Controller
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
@ResponseBody
public ArrayList<String> testRequestBody() {
//这里以list为例,map跟这个一样的
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("orange");
list.add("pea");
return list;
}
jsp
function fun(){
$.ajax({
type : "post",
dataType : "json",
url : "/testAjax.action",
success : function(result) {
alert(JSON.stringify(result));
}
});
}
要点:
在我做这篇总结的时候,一直忘了一个事,导致使用@ResponseBody返回的时候,前台一直报错:406 (Not Acceptable) 最终发现如果使用@ResponseBody必须要添加jackson的依赖,因为springmvc在做返回的时候通过jackson去判断返回什么类型,我这里用的maven所以添加依赖:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
2、通过httpServletResponse的writer返回:
list:
Controller
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(HttpServletResponse response){
ArrayList<String> list = new ArrayList<String>();
list.add("apple");
list.add("orange");
list.add("pea");
String jsonlist = JSON.toJSONString(list);
response.getWriter().write(jsonlist);
}
jsp
function fun(){
$.ajax({
url:'/testAjax.action',
type:'POST',
dataType:'json',
contentType:'application/json',
success:function(data){
alert(JSON.stringify(data));
}
})
}
map:
Controller
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
public void testAjax(HttpServletResponse response){
HashMap<String, String> map = new HashMap<String, String>();
map.put("name","xujie");
map.put("age","23");
String jsonlist = JSON.toJSONString(map);
response.getWriter().write(jsonlist);
}
jsp
function fun(){
$.ajax({
url:'/testAjax.action',
type:'POST',
dataType:'json',
contentType:'application/json',
success:function(data){
alert(JSON.stringify(data));
}
})
}
对象
@RequestMapping(value = "testAjax.action",method = RequestMethod.POST)
@ResponseBody
public void testAjax(HttpServletResponse response) throws Exception {
Person person = new Person();
person.setAge("23");
person.setName("xujie");
String string = JSON.toJSONString(person);
response.getWriter().write(string);
}
jsp
function fun(){
$.ajax({
url:'/testAjax.action',
type:'POST',
dataType:'json',
contentType:'application/json',
success:function(data){
alert(JSON.stringify(data));
}
})
}
springMVC学习总结(四)springmvc处理json数据类型以及fastjson的使用的更多相关文章
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...
- (转)SpringMVC学习(十二)——SpringMVC中的拦截器
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍.在springmvc中,也支持对json数据的解析和转换,这篇文章主要总结一下springm ...
- SpringMVC学习笔记:SpringMVC框架的执行流程
一.MVC设计模式 二.SpringMVC框架介绍 三.SpringMVC环境搭建 四.SpringMVC框架的请求处理流程及体系结构
- springmvc学习第四天
数据类型的转换.格式化.校验 1.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创 ...
- SpringMVC 学习笔记(四)
41. 尚硅谷_佟刚_SpringMVC_返回JSON.avi SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面 导包: 除了一些sprin ...
- springmvc学习日志四
一.回顾 1.文件上传 1.1引入fileupload的jar包 1.2在springmvc的配置文件中引入CommonsMutilpartResolver文件上传解析器 1.3在控制层在写入代码 2 ...
随机推荐
- for循环中执行setTimeout问题
代码片段: for(var i=0;i<8;i++){ setTimeout(function () { console.log(i) },0) } 输出了8次8,这跟js的执行顺序和作用域链有 ...
- WPF 完美截图 <一>
最近比较懒,一直没继续,此处省略一万字,下面开始正题. 简单介绍下截图的思路: 核心是利用 public CroppedBitmap(BitmapSource source, Int32Rect so ...
- jq获取被选中的option的值。jq获取被选中的单选按钮radio的值。
温故而知新,一起复习下jq的知识点. (1) jq获取被选中的option的值 <select id="select_id"> <option value=&qu ...
- 2734:十进制到八进制-poj
总时间限制: 1000ms 内存限制: 65536kB 描述 把一个十进制正整数转化成八进制. 输入 一行,仅含一个十进制表示的整数a(0 < a < 65536). 输出 一行,a的 ...
- [smartMenu.js] 一个基于jquery的实用的右键拓展菜单栏插件
正在为电子书阅读器添加精准易用的标记功能,其中一个方案是扩展阅读器界面的右键菜单栏,使得用户右键点击某个词.子句.段落的时候可以进行扩展操作. 右键菜单栏有很多基于jQuery的插件,其中灵活性比较强 ...
- GIT常用命令(图片版)
Git 是一个很强大的分布式版本控制系统.它不但适用于管理大型开源软件的源代码,管理私人的文档和源代码也有很多优势. 本来想着只把最有用.最常用的 Git 命令记下来,但是总觉得这个也挺有用.那个也用 ...
- Android开发之漫漫长途 番外篇——内存泄漏分析与解决
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
- phpstorm快捷键记录
快捷键记录 Ctrl + N 按类名查找Ctrl + Shift + N 按文件名查找,快速查找文件Ctrl + Shift+Alt+N 根据函数名查找Ctrl + F 当前文件查找Ctrl + Sh ...
- Java数据结构和算法(七)——链表
前面博客我们在讲解数组中,知道数组作为数据存储结构有一定的缺陷.在无序数组中,搜索性能差,在有序数组中,插入效率又很低,而且这两种数组的删除效率都很低,并且数组在创建后,其大小是固定了,设置的过大会造 ...
- nanomsg 如何写数据到PipelineDB
nanomsg:https://github.com/nanomsg/nanomsg PipelineDB:https://github.com/pipelinedb/pipelinedb nanom ...