SpringMVC中JSON数据交互

柔情只为你懂 2024-04-19 09:29 140阅读 0赞

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坐标

  1. <dependency>
  2. <groupId>com.fasterxml.jackson.core</groupId>
  3. <artifactId>jackson-core</artifactId>
  4. <version>2.5.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.fasterxml.jackson.core</groupId>
  8. <artifactId>jackson-databind</artifactId>
  9. <version>2.5.2</version>
  10. </dependency>

在这里插入图片描述

2.在返回对象上添加@ResponseBody注解即可

  1. @Controller
  2. public class UserController {
  3. /** * 响应给客户端的是一个user对象 对应的JSON数据 * 1.导入Jackson的依赖 * 3.在处理方法中添加@ResponseBody注解 */
  4. @RequestMapping("/demo1")
  5. @ResponseBody
  6. public User demo1(){
  7. User user = new User();
  8. user.setId(1);
  9. user.setName("阿猫");
  10. user.setAddress("sz");
  11. return user;
  12. }
  13. @RequestMapping("/demo2")
  14. @ResponseBody
  15. public List<User> demo2(){
  16. return Arrays.asList(
  17. new User(1,"阿猫","sz"),
  18. new User(2,"阿狗","bj"),
  19. new User(3,"张三","sh"));
  20. }
  21. @RequestMapping("/demo3")
  22. @ResponseBody
  23. public Map<String, Object> demo3(){
  24. List<User> list = Arrays.asList(
  25. new User(1,"阿猫","sz"),
  26. new User(2,"阿狗","bj"),
  27. new User(3,"张三","sh"));
  28. Map<String, Object> map = new HashMap<>();
  29. map.put("total", 1);
  30. map.put("rows", list);
  31. return map;
  32. }
  33. }

测试
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

额外说明:
   默认情况下,JSON处理的HttpMessageConverter在org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter类中,
   如果当前项目的classpath下有jackson或者gson的依赖,则会被该类自动加载,然后,创建相应的HttpMessageConverter。

对于fastjson,由于系统未提供自动支持,因此需要开发者手动配置fastjson的HttpMessageConverter,配置方式如下:

1.引入fastjson依赖
2.加入配置:

  1. <mvc:annotation-driven validator="validatorFactoryBean">
  2. <mvc:message-converters>
  3. <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>
  4. </mvc:message-converters>
  5. </mvc:annotation-driven>

HttpMessageConverter承担两个事:
1.将请求结果转为json
2.将浏览器发送来的json转为对象

接收JSON数据

注意:json只能是在请求体中,因此,json只能放在post或者put请求中,
注意,请勿使用get/delete请求去测试json参数传递。

示例代码如下:

  1. /** * 接收一个JSON格式的数据,需要框架帮我们自动转化为相关的Java对象 * 客户端提交的数据需要通过 AJAX POST方式提交JSON数据 * 需要在新参前加@RequestBody * @RequestBody:会把请求过来的JSON数据转成对象;主要用来接收前端传递给后端的json字符串中的数据的 */
  2. @RequestMapping("/demo")
  3. @ResponseBody
  4. public void demo4(@RequestBody User user){
  5. System.out.println(user);
  6. }

通过jquery的ajax发送json数据测试

  1. 注意: 1.需要导入jquery.min.js
  2. 2.需要配置静态资源放行
  3. <%@ page language="java" contentType="text/html; charset=UTF-8"
  4. pageEncoding="UTF-8"%>
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Insert title here</title>
  9. <script type="text/javascript" src="js/jquery.min.js"></script>
  10. </head>
  11. <body>
  12. <input type="button" value="提交JSON数据" onclick="demo();">
  13. <script type="text/javascript">
  14. function demo(){
  15. $.ajax({
  16. type: 'POST',
  17. url: "demo",
  18. contentType: "application/json",//如果想以json格式把数据提交到后台的话,这个必须有,否则只会当做表单提交
  19. data: JSON.stringify({ "id":18,"name":"sam","address":"12"}),//JSON.stringify()必须有,否则只会当做表单的格式提交
  20. dataType: "json",//期待返回的数据类型
  21. success: function(data){
  22. alert("success:"+data);
  23. },
  24. error:function(data){
  25. alert("error"+data);
  26. }
  27. });
  28. }
  29. </script>
  30. </body>
  31. </html>

在这里插入图片描述在这里插入图片描述
在springmvc中,直接接收json参数,如果参数中有日期的话,
不需要定义日期类型转换器,日期的转换由gson/jackson/fastjson来提供。

发表评论

表情:
评论列表 (有 0 条评论,140人围观)

还没有评论,来说两句吧...

相关阅读