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 ...
随机推荐
- Mac上查看隐藏文件夹/文件
一.查看隐藏文件夹: 可以直接在终端执行 open ~/文件夹名称 如: open ~/.ssh 二.查看隐藏文件: 在Finder下进入你想要操作的文件夹,按快捷键Command + F 调出搜索窗 ...
- 教你如何实现微信小程序与.net core应用服务端的无状态身份验证
随着.net core2的发布,越来越多人使用.net core2开发各种应用服务端,下面我就结合自己最近开发的一款小程序,给大家分享下,怎么使用小程序登录后,小程序与服务端交互的权限控制. .net ...
- sublime text3添加右键打开的操作
前一段重新安装了Sublime Text3,不过一直不在右键菜单中,所以决定添加,有如下2种方法. 方法一(推荐). 把以下代码,复制到SublimeText3的安装目录,然后重命名为:sublime ...
- mysql 查询各数据库的占用大小
select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(trunc ...
- JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort
在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...
- input取值区间实例
前端开发中经常会遇到 input 取值区间的需求,比如搜索的时候,价格区间,积分值区间 大致的需求为 input 的值必须是正整数,第二个 input 的值必须大于第一个 DOM结构如下: <d ...
- webpack 3.X学习之CSS处理
Loaders Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因.通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理. Lo ...
- python自动发邮件库yagmail
#### 一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text import MIMEText from ...
- ES6模块化
关于ES6模块化 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来.其他语言都有这项功能,比如 Ruby 的require ...
- appium+Linux环境安装配置
背景:想要在Jenkins上跑appium的自动化测试,所以想要在Jenkins服务器(Linux远程)上安装appium服务,故而研究了一下appium+Linux下安装.虽然有无数的前辈踩过坑 ...