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; } }
测试
额外说明:
对于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来提供。
来源:51CTO
作者:虎啊兄弟
链接:https://blog.csdn.net/weixin_44922018/article/details/100892707