SpringMVC之JSON交互

#什么是json?

      json是一种用于储存数据格式或是数据传输方式,是js脚本语言的子集。

#json的作用?

     它传递对象、数组等数据结构。如果是单个数据,则要用数组,不用对象,因为对象是键值对方式去存储,其形式为“名称:值”的形式,名称必须为字符串类型,而可以为任意类型

     json是用于数据交换的,浏览器与控制器之间进行数据交换,Spring提供了一个接口来完成该工作,并用该接口的实现类来完成操作,该实现类要用jackson开源包(在Maven仓库中找到相关依赖,然后在pom.xml中下载相关的数据)来读写数据,并将java对象转换为json对象或xml文档,也可以将json对象和xml文档转换为java对象。(java对象<----->json对象或xml文档进行转换)

#json与xml区别?

      都是数据传输方式,但相比之下,json占内存小,且解析速度快

-------------------------------------------------------------------------------------

#操作

1).添加相关Spring包,另外,在http://mvnrepository.com/artifact/com.fasterxml.jackson.core下载fastjson包,其实在github上有相关代码备份;从经验上来看最好用阿里的fastjson,用json包有时会出现版本冲突;

相关的pom.xml依赖入下:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.4.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.24</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
  </dependencies>

2).在web.xml中配置前端控制器和Spring-config.xml的路径,并添加静态资源文件的配置,因web.xml没有设置对相关请求的拦截,需要在Spring-config.mvc中添加<mvc:resources location="" mapper="">,这里首先要引入jq库;

3).在Spring-config.xml中,添加额外如下配置

 <mvc:annotation-driven>
    <!--配置@ResponseBody由fastjson解析-->
        <mvc:message-converters>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"/>
        </mvc:message-converters>
    </mvc:annotation-driven>
    <mvc:default-servlet-handler />

    <!-- 支持mvc注解驱动 -->
    <!--
在spring中一般采用@RequestMapping注解来完成映射关系, 要想使@RequestMapping注解生效必须向上下文中注册
DefaultAnnotationHandlerMapping
和一个AnnotationMethodHandlerAdapter 实例,这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助
我们自动完成上述两个实例的注入。
--> <mvc:resources location="/js/" mapping="/js/**"/>

       

4).根据表单写javaBean;

     

5).写jsp页面,这里面涉及到ajax     

 1 <%--
 2   Created by IntelliJ IDEA.
 3   User: shijinglu
 4   Date: 2019/2/1
 5   Time: 20:21
 6   To change this template use File | Settings | File Templates.
 7 --%>
 8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
 9 <html>
10 <head>
11     <title>测试JSON交互</title>
12 
13     <!--引入js文件,引入路径 从当前项目的js文件夹下的jquery-1.11.3.min.js-->
14     <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-1.11.3.min.js">
15     </script>
16     <!--写一个function testJson()-->
17     <script type="text/javascript">
18         function testJson() {
19             <!--获取用户输入的用户名和密码-->
20             var username=$("#username").val();
21             var password=$("#password").val();
22             <!--发一个ajax请求-->
23             $.ajax({
24                 <!--testJson路径  默认是当前页的地址,这里是交给testJson处理-->
25                 url:"${pageContext.request.contextPath}/testJson",
26                 type:"post",
27                 <!--把发送过来的数据转换成json字符串-->
28                 data:JSON.stringify({username:username,password:password}),
29                 <!--请求类型设置为json字符串,并设置字符集为utf-8-->
30                 contentType: "application/json;charset=UTF-8",
31                 <!--定义回调的响应格式为json字符串,该属性可以省略-->
32                 dataType:"json",
33                 success : function(data) {
34                     if(data !=null){
35                         alert("您输入的用户名为:"+data.username+"密码为:"+data.password);
36                     }
37                 }
38             });
39 
40         }
41     </script>
42 </head>
43 <body>
44 <form>
45     用户名:<input  name="username" id="username"><br/>    <!--name后面的值必须与pojo里面封装的值一致,否则读取的值是空值-->
46     密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password" id="password"><br/>
47     <input type="button" value="测试json交互" onclick="testJson()">
48 </form>
49 </body>
50 </html>

     

6).写控制器;

@Controller  //表示控制器  等价于在配置文件里面写<bean id="" class="">
public class UserController{

     /**
      * 接收页面请求的数据,并以json格式返回数据
      * */
     @RequestMapping(value="/testJson",method = RequestMethod.POST,consumes = "application/json")
     //@ReponseBody:是把user对象转换为json,因为响应端的浏览器不认识java对象,但认识js对象标记。
    @ResponseBody
     //@RequestBody:把请求的json字符串(data后面的内容)转换成user对象
    public User testJson(@RequestBody User user){
         System.out.println(user);
         //并返回json格式
         return user;
     }
}
 

原理待补充

成年人的世界没有那么多的童话,也没有那么多的逆袭。
原文地址:https://www.cnblogs.com/shijinglu2018/p/10349401.html