1 JOSN数据交互
1.1 什么是JOSN
JSON (JavaScript Object Notation,JS对 象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C++、C#、Java、 JavaScript、 Perl、 Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据。
1.1.1 JSON特点
- JSON与XML非常相似,都是用来存储数据的,并且都是基于纯文本的数据格式。
- 与XML相比,JSON解析速度更快,占用空间更小,且易于阅读和编写,同时也易于机器解析和生成。
1.2 JSON数据结构
JSON有两种数据结构:对象结构和数组结构。
1.2.1 对象结构
在对象结构以“{
”开始以“}
”结束。中间部分有0个或多个以英文",
"分隔的name:value
对构成,中间以“:
"隔开。
{
key1:value1,
key2:value2
}
需要注意的是这里value
只能是String类型,而value
可以是String、Number、Object、Array等数据类型。 例如:
{
"city":"济南",
"stree":"南辛庄西路",
"postcode":250022
}
1.2.2 数组结构
数组结构以[
开始,以]
结束。中间部分由0个或多个以英文,
分隔的值的列表组成。
{
"people":[
{
"firstName":"A",
"lastName":"B"
},
{
"firstName":"C",
"lastName":"D"
}
]
}
一个数组包含了String、Number、Boolean、null类型数据,JSON如下:
["abc",123456,false,null]
对象、数组数据结构也可以分别组合成更为复杂的数据结构,例如:一个person对象包含name、hobby和address对象,代码如下:
{
"name":"A"
"hobby":["篮球","羽毛球","游泳"]
"address":{
"city":"beijing"
"street":"xilu"
"postcode":"100096"
}
}
使用JSON存储单个数据(如“abc”),一定要使用数组的形式,不要使用Object形式,因为Object形式必须是“名称”:值
的形式。
1.3 JSON数据转换
1.3.1 HttpMessageConverter接口
Spring提供了一个HttpMessageConverter<T>
接口来实现浏览器与控制器类(Controller)之间的数据交互。
接口的作用:主要用于将请求信息中的数据转换为一个类型为T的对象,并将类型为T的对象绑定到请求方法的参数中,或者将对象转换为响应信息传递给浏览器显示。
1.3.2 MappingJackson2MessageConverter类
这是Spring MVC用来默认处理JSON格式请求响应的实现类。作用是:
- 将Java对象转换为JSON对象和XML文档
- 也可以将JSON对象和XML文档转换为Java对象
1.3.3 实现JSON数据转换的细节之处
1.3.3.1 添加类库(pom.xml)
<!-- json和bean之间相互转换 -->
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<!-- 数据绑定包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
1.3.3.2 使用的注解
在使用注解式开发时需要用到两个重要的JSON格式转换注解,分别为@RequestBody和@ResponseBody,解释如下:
![](https://i-blog.csdnimg.cn/blog_migrate/ba7242e128f5ebcd6771aa626ebe2f44.png)
1.3.3.3 配置JSON转换器(springmvc-config.xml)
在配置JSON转换器的时候,除了常用的<mvc:annotation-drivern/>
方式配置,还可以使用<bean>
标签的方式进行显式的配置,方法如下:
![](https://i-blog.csdnimg.cn/blog_migrate/f26bb52aca52776548d77c50ca079026.png)
需要注意的是在使用<bean>
标签配置注解方式的处理器映射器和处理器适配器必须配对使用。
1.3.3.4 配置静态资源的访问方式
- 在springmvc-config.xml中使用
<mvc:resources>
元素实现对静态资源的访问 - 在springmvc-config.xml中使用
<mvc:default-servlet-handler>
标签 - 在web.xml中激活Tomcat默认的Servlet来处理静态文件访问
<!-- 激活tomcat的静态资源拦截,需要哪些静态文件,后边继续追加就可以了 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 拦截所有*.js的请求,交给名为default的Servlet处理 -->
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- 拦截所有*.css的请求,交给名为default的Servlet处理 -->
<url-pattern>*.css</url-pattern>
</servlet-mapping>
这里Servlet的名称也是有服务器来确定的,不同的服务器有不同的名称,查常见服务器及其Servlet名称如下:
![](https://i-blog.csdnimg.cn/blog_migrate/0d361a3afd56d5a4c69ffca5e726ca8b.png)
1.3.4 举个例子
1.3.4.1 页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page isELIgnored="false" %>
<html>
<head>
<title>测试JSON交互</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function testJson(){
// 获取输入的用户名和密码
var username = $("#username").val();
var password = $("#password").val();
$.ajax({
url : "${pageContext.request.contextPath }/testJson",
type : "post",
// data表示发送的数据
data :JSON.stringify({username:username,password:password}),
// 定义发送请求的数据格式为JSON字符串
contentType : "application/json;charset=UTF-8",
//定义回调响应的数据格式为JSON字符串,该属性可以省略
dataType : "json",
//成功响应的结果
success : function(data){
if(data != null){
alert("您输入的用户名为:"+data.username+
"密码为:"+data.password);
}
}
});
}
</script>
</head>
<body>
<form>
用户名:<input type="text" name="username" id="username"><br />
密 码:
<input type="password" name="password" id="password"><br />
<input type="button" value="测试JSON交互" onclick="testJson()" />
</form>
</body>
</html>
1.3.4.2 UserController类
@RequestMapping("/testJson")
@ResponseBody
public User testJson(@RequestBody User user) {
System.out.println(user);
user.setUsername("hello" + user.getUsername());
return user;
}
1.3.4.3 测试结果
![](https://i-blog.csdnimg.cn/blog_migrate/2b7ddd3b54f90b09161998b5dbb9a10d.png)
2 RESTful支持
2.1 什么是Restful
RESTful也称之为REST,是英文"Representational StateTransfer"的简称。可以将他理解为一种软件架构风格或设计风格,而不是一个标准。Web应用程序最重要的REST原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。
简单来说,RESTful风格就是把请求参数变成请求路径的一种风格:
![](https://i-blog.csdnimg.cn/blog_migrate/506e7288f9e6a3843d452fb639732b7f.png)
2.2 举个例子
2.2.1 页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page isELIgnored="false" %>
<html>
<head>
<title>RESTful测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function search(){
// 获取输入的查询编号
var id = $("#number").val();
$.ajax({
url : "${pageContext.request.contextPath }/user/"+id,
type : "GET",
//定义回调响应的数据格式为JSON字符串,该属性可以省略
dataType : "json",
//成功响应的结果
success : function(data){
if(data.username != null){
alert("您查询的用户是:"+data.username);
}else{
alert("没有找到id为:"+id+"的用户!");
}
}
});
}
</script>
</head>
<body>
<form>
编号:<input type="text" name="number" id="number">
<input type="button" value="搜索" onclick="search()" />
</form>
</body>
</html>
2.2.2 UserController类
@RequestMapping("/user/{id}")
@ResponseBody
public User selectUser(@PathVariable("id") String id) {
System.out.println(id);
User user = new User();
if ("123".equals(id)) {
user.setUsername("ct");
user.setPassword("111");
}
return user;
}
2.2.3 测试结果
![](https://i-blog.csdnimg.cn/blog_migrate/6095831d3ce082eaac51cf71b9db99e3.png)
声明:
若本人发布的作品涉及版权或存在其他问题,请联系我删除。
谢谢浏览!