文章目录
- JSON
- JSON的特点
- JSON的两种数据结构
- JSON数据转换
- RESTful
- 拦截器
- 拦截器类的两种定义方式
- HandlerInterceptor的三个方法
- 拦截器的配置
- 单个拦截器的执行流程
- 多个拦截器的执行流程
JSON
JSON
(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它是基于JavaScript的一个子集,使用了C、C++、C#、Java、JavaScript、Perl、Python等其他语言的约定,采用完全独立于编程语言的文本格式来存储和表示数据。
JSON的特点
JSON与XML非常相似,都是用来存储数据的,并且都是基于纯文本的数据格式。与XML相比,JSON解析速度更快,占用空间更小,且易于阅读和编写,同时也易于机器解析和生成。
JSON的两种数据结构
1.对象结构
在对象结构以“{”开始,以“}”结束。中间部分由0个或多个以英文“,”分隔的name:value对构成(注意name和value之间以英文“:”分隔),其存储形式如下图所示。
JSON对象数据结构的关键字(key)必须为String
类型,值(value)可以是String、Number、Object、Array等数据类型。
例如:{“city”:“Beijing”,“street”:“Xisanqi”,“postcode”:100096}
2.数组结构
数组结构以“[”开始,以“]”结束。中间部分由0个或多个以英文“,”分隔的值的列表组成,其存储形式如下图所示。
例如:[“abc”,12345,false,null]
对象、数组数据结构也可以分别组合构成更为复杂的数据结构。
如果使用JSON存储单个数据(如“abc”),一定要使用数组
的形式,不要使用Object形式,因为Object形式必须是“名称:值”的形式。
JSON数据转换
Spring提供了一个HttpMessageConverter<T>
接口来实现浏览器与控制器类(Controller)之间的数据交互。该接口主要用于将请求信息中的数据转换为一个类型为T的对象,并将类型为T的对象绑定到请求方法的参数中,或者将对象转换为响应信息传递给浏览器显示。
在配置JSON转换器时,除了常用的<mvc:annotation-drivern />方式配置外,还可以使用<bean>
标签的方式进行显示的配置。具体配置方式如下:
MappingJackson2HttpMessageConverter是Spring MVC默认处理JSON格式请求响应的实现类。要使用它对数据进行转换,就需要使用Jackson的开源包,开发时所需的开源包及其描述如下所示:
jackson-annoations-2.8.8.jar:JSON转换注解包;
jackson-core-2.8.8.jar:JSON转换核心包;
jackson-databind-2.8.8.jar:JSON转换的数据绑定包。
在使用注解式开发时,需要用到2个重要的JSON格式转换注解,分别为@RequestBody和@ResponseBody
RESTful
RESTful
也称之为REST,是英文“Representational State Transfer”的简称。可以将他理解为一种软件架构风格或设计风格,而不是一个标准。
RESTful风格在HTTP请求中,使用put、delete、post和get
方式分别对应添加、删除、修改和查询的操作。
传统的URL请求格式为:http://.../queryItems?id=1
采用RESTful风格后,其URL请求为:http://.../items/1
动词形式的路径变成了名词,参数id=1变成了请求路径的一部分。(不能出现动词)
拦截器
Spring MVC中的拦截器
(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。
拦截器类的两种定义方式
1.通过实现HandlerInterceptor
接口,或继承HandlerInterceptor接口的实现类(如HandlerInterceptorAdapter)来定义。
2.通过实现WebRequestInterceptor
接口,或继承WebRequestInterceptor接口的实现类来定义。
HandlerInterceptor的三个方法
preHandle():该方法会在控制器方法前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;当其返回值为false时,会中断后续的所有操作。
postHandle():该方法会在控制器方法调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
afterCompletion():该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。继承WebRequestInterceptor
可以定义Spring MVC中的拦截器。
拦截器的配置
要使自定义的拦截器类生效,还需要在Spring MVC的配置文件中进行配置。
注意:<mvc:interceptor>
中的子元素必须按照上述代码的配置顺序进行编写,否则文件会报错。
单个拦截器的执行流程
多个拦截器的执行流程
这里给出一个拦截器的典型应用场景: