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的使用的更多相关文章

  1. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...

  2. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  3. springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定

    springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...

  4. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  5. 【SpringMVC学习09】SpringMVC与前台的json数据交互

    json数据格式在接口调用中.html页面中比较常用,json格式比较简单,解析也比较方便,所以使用很普遍.在springmvc中,也支持对json数据的解析和转换,这篇文章主要总结一下springm ...

  6. SpringMVC学习笔记:SpringMVC框架的执行流程

    一.MVC设计模式 二.SpringMVC框架介绍 三.SpringMVC环境搭建 四.SpringMVC框架的请求处理流程及体系结构

  7. springmvc学习第四天

    数据类型的转换.格式化.校验 1.数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创 ...

  8. SpringMVC 学习笔记(四)

    41. 尚硅谷_佟刚_SpringMVC_返回JSON.avi SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面 导包: 除了一些sprin ...

  9. springmvc学习日志四

    一.回顾 1.文件上传 1.1引入fileupload的jar包 1.2在springmvc的配置文件中引入CommonsMutilpartResolver文件上传解析器 1.3在控制层在写入代码 2 ...

随机推荐

  1. 新一代的昆明网络seo优化技巧

    一年一度的双11又即将到来,今天选择在双11这天新注册了一个博客园,第一篇文章,我决定来谈一谈现在的网络SEO. 起首咱们来熟悉下SEO是什么,SEO全名叫Search Engine Optimiza ...

  2. ARM1

    CPU有取指周期,译码周期,执行周期包括的器件有程序计数器(CP),指令cache,数据总线,指令寄存器(IR),数据地址寄存器(AR),指令译码器,时序发生器操作控制器,控制总线,数据缓冲寄存器(D ...

  3. 实现基于Keepalived主从高可用集群网站架构

    背景 上一期我们实现了基于lvs负载均衡集群的电商网站架构,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展 ...

  4. Nginx 搭建图片服务器

    Nginx 搭建图片服务器 本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装:http://www ...

  5. Python基础-数据类型和变量

    数据类型 python中包含6种标准数据类型:1.Number 数值类型2.String 字符串类型3.List 列表类型4.Tuple 元祖类型5.Dict 字典类型6.Set 集合类型 注意:除了 ...

  6. 操作系统学习笔记----进程/线程模型----Coursera课程笔记

    操作系统学习笔记----进程/线程模型----Coursera课程笔记 进程/线程模型 0. 概述 0.1 进程模型 多道程序设计 进程的概念.进程控制块 进程状态及转换.进程队列 进程控制----进 ...

  7. python/numpy/tensorflow中,对矩阵行列操作,下标是怎么回事儿?

    Python中的list/tuple,numpy中的ndarrray与tensorflow中的tensor. 用python中list/tuple理解,仅仅是从内存角度理解一个序列数据,而非数学中标量 ...

  8. C语言之计算log2

    #include<stdio.h>int main(){int num,count=0,i=0,ret=0;scanf("%d",&num);count=num ...

  9. Python入门 - 函数方法

    本节主讲python函数的基本用法,主要包括传递参数.匿名函数和变量作用域. 一.传递参数 python除了传递必需参数外,还可以传递默认参数,不定长参数和关键字参数. 1. 传递必需参数 def m ...

  10. 边框(Border) 和 轮廓(Outline) 属性

    border 复合属性.设置对象边框的特性. 标签定义及使用说明 如果上述值缺少一个没有关系,例如border:#FF0000;是允许的. 默认值: not specified 继承: no Java ...