SpringMVC中JSON数据交互
JSON数据交互
响应JSON数据
- 添加依赖:
对于Gson和jackson这两个json处理依赖,直接添加即可。
除此之外,其他的json解析器如fastjson都需要手动配置HttpMessageConverter.
实际上,在SpringMVC中,是由一个名叫HttpMessageConverter的类来提供对象到JSON字符串的转换的。而SpringMVC默认就提供了Gson和Jackson的HttpMessageConverter,分别是org.springframework.http.converter.json.GsonHttpMessageConverter和MappingJackson2HttpMessageConverter。对于其他的JSON解析器,只需要开发者手动配置一下HttpMessageConverter即可。
本案例使用 jackson处理
Maven坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.2</version>
</dependency>
2.在返回对象上添加@ResponseBody注解即可
@Controller
public class UserController {
/** * 响应给客户端的是一个user对象 对应的JSON数据 * 1.导入Jackson的依赖 * 3.在处理方法中添加@ResponseBody注解 */
@RequestMapping("/demo1")
@ResponseBody
public User demo1(){
User user = new User();
user.setId(1);
user.setName("阿猫");
user.setAddress("sz");
return user;
}
@RequestMapping("/demo2")
@ResponseBody
public List<User> demo2(){
return Arrays.asList(
new User(1,"阿猫","sz"),
new User(2,"阿狗","bj"),
new User(3,"张三","sh"));
}
@RequestMapping("/demo3")
@ResponseBody
public Map<String, Object> demo3(){
List<User> list = Arrays.asList(
new User(1,"阿猫","sz"),
new User(2,"阿狗","bj"),
new User(3,"张三","sh"));
Map<String, Object> map = new HashMap<>();
map.put("total", 1);
map.put("rows", list);
return map;
}
}
测试
额外说明:
默认情况下,JSON处理的HttpMessageConverter在org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter类中,
如果当前项目的classpath下有jackson或者gson的依赖,则会被该类自动加载,然后,创建相应的HttpMessageConverter。
对于fastjson,由于系统未提供自动支持,因此需要开发者手动配置fastjson的HttpMessageConverter,配置方式如下:
1.引入fastjson依赖
2.加入配置:
<mvc:annotation-driven validator="validatorFactoryBean">
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
</mvc:message-converters>
</mvc:annotation-driven>
HttpMessageConverter承担两个事:
1.将请求结果转为json
2.将浏览器发送来的json转为对象
接收JSON数据
注意:json只能是在请求体中,因此,json只能放在post或者put请求中,
注意,请勿使用get/delete请求去测试json参数传递。
示例代码如下:
/** * 接收一个JSON格式的数据,需要框架帮我们自动转化为相关的Java对象 * 客户端提交的数据需要通过 AJAX POST方式提交JSON数据 * 需要在新参前加@RequestBody * @RequestBody:会把请求过来的JSON数据转成对象;主要用来接收前端传递给后端的json字符串中的数据的 */
@RequestMapping("/demo")
@ResponseBody
public void demo4(@RequestBody User user){
System.out.println(user);
}
通过jquery的ajax发送json数据测试
注意: 1.需要导入jquery.min.js包
2.需要配置静态资源放行
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
</head>
<body>
<input type="button" value="提交JSON数据" onclick="demo();">
<script type="text/javascript">
function demo(){
$.ajax({
type: 'POST',
url: "demo",
contentType: "application/json",//如果想以json格式把数据提交到后台的话,这个必须有,否则只会当做表单提交
data: JSON.stringify({ "id":18,"name":"sam","address":"12"}),//JSON.stringify()必须有,否则只会当做表单的格式提交
dataType: "json",//期待返回的数据类型
success: function(data){
alert("success:"+data);
},
error:function(data){
alert("error"+data);
}
});
}
</script>
</body>
</html>
在springmvc中,直接接收json参数,如果参数中有日期的话,
不需要定义日期类型转换器,日期的转换由gson/jackson/fastjson来提供。
还没有评论,来说两句吧...