文章目录

  • 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等数据类型。

json存储 java json存储结构_JSON


例如:{“city”:“Beijing”,“street”:“Xisanqi”,“postcode”:100096}

2.数组结构

数组结构以“[”开始,以“]”结束。中间部分由0个或多个以英文“,”分隔的值的列表组成,其存储形式如下图所示。

json存储 java json存储结构_拦截器_02


例如:[“abc”,12345,false,null]

对象、数组数据结构也可以分别组合构成更为复杂的数据结构。

如果使用JSON存储单个数据(如“abc”),一定要使用数组的形式,不要使用Object形式,因为Object形式必须是“名称:值”的形式。

JSON数据转换

Spring提供了一个HttpMessageConverter<T>接口来实现浏览器与控制器类(Controller)之间的数据交互。该接口主要用于将请求信息中的数据转换为一个类型为T的对象,并将类型为T的对象绑定到请求方法的参数中,或者将对象转换为响应信息传递给浏览器显示。

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

json存储 java json存储结构_spring_03


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

json存储 java json存储结构_java_04

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的配置文件中进行配置。

json存储 java json存储结构_json存储 java_05


注意:<mvc:interceptor>中的子元素必须按照上述代码的配置顺序进行编写,否则文件会报错。

单个拦截器的执行流程

json存储 java json存储结构_spring_06

多个拦截器的执行流程

json存储 java json存储结构_java_07


这里给出一个拦截器的典型应用场景:

json存储 java json存储结构_拦截器_08