SpringMVC中JSON数据交互

匿名 (未验证) 提交于 2019-12-03 00:10:02

JSON数据交互

响应JSON数据

  1. 添加依赖:

对于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; 	} } 

测试

额外说明:

对于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来提供。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!