JOSN数据交互和RESTful支持

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,解释如下:

1.3.3.3 配置JSON转换器(springmvc-config.xml)

  在配置JSON转换器的时候,除了常用的<mvc:annotation-drivern/>方式配置,还可以使用<bean>标签的方式进行显式的配置,方法如下:

  需要注意的是在使用<bean>标签配置注解方式的处理器映射器和处理器适配器必须配对使用。

1.3.3.4 配置静态资源的访问方式
  1. 在springmvc-config.xml中使用<mvc:resources>元素实现对静态资源的访问
  2. 在springmvc-config.xml中使用<mvc:default-servlet-handler>标签
  3. 在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名称如下:

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 />&nbsp;&nbsp;&nbsp;码:
          <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 测试结果

2 RESTful支持

2.1 什么是Restful

  RESTful也称之为REST,是英文"Representational StateTransfer"的简称。可以将他理解为一种软件架构风格或设计风格,而不是一个标准。Web应用程序最重要的REST原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。
  简单来说,RESTful风格就是把请求参数变成请求路径的一种风格:

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 测试结果


声明:
若本人发布的作品涉及版权或存在其他问题,请联系我删除。
谢谢浏览!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值