#什么是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 密 码:<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; } }
原理待补充;