Ajax的json数据交换

1. AJAXjson数据交互

1.1. @RequestBody

@RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json数据)转换为java对象并绑定到Controller方法的参数上。

@RequestBody注解实现接收http请求的json数据,将json数据转换为java对象进行绑定

1.2. @ResponseBody

@ResponseBody注解用于将Controller的方法返回的对象,通过springmvc提供的HttpMessageConverter接口转换为指定格式的数据如:json,xml等,通过Response响应给客户端

@ResponseBody注解实现将Controller方法返回java对象转换为json响应给客户端。

前台页面:

1.3. 请求json,响应json实现:

1.3.1. 加入jar包

如果需要springMVC支持json,必须加入json的处理jar

我们使用Jackson

1.3.2. 配置json转换器

Json转换器·在<mvc:annotation-driven />已经内置好了,

如果不使用注解驱动<mvc:annotation-driven />,

就需要给处理器适配器配置json转换器

springmvc.xml配置文件中,给处理器适配器加入json转换器:

2. 拦截器

2.1. 定义

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

2.2. 拦截器定义

实现HandlerInterceptor接口,如下:

2.3. 拦截器配置

上面定义的拦截器再复制一份HandlerInterceptor2HandlerInterceptor3

 

springmvc.xml中配置拦截器

 

 

2.4. 正常流程测试

2.4.1. 运行流程

2.5. 中断流程测试

访问action

2.5.1. 运行流程

HandlerInterceptor1的preHandler方法返回false,HandlerInterceptor2返回true,HandlerInterceptor3返回true,运行流程如下:

 

 

从日志看出第一个拦截器的preHandler方法返回false后第一个拦截器只执行了preHandler方法,其它两个方法没有执行,第二个拦截器的所有方法不执行,且Controller也不执行了。

 

HandlerInterceptor1的preHandler方法返回true,HandlerInterceptor2返回false,

HandlerInterceptor3返回true或false,

运行流程如下:

 

 

从日志看出第二个拦截器的preHandler方法返回false后第一个拦截器的postHandler没有执行,第二个拦截器的postHandlerafterCompletion没有执行,且controller也不执行了。

总结:

preHandle按拦截器定义顺序调用

postHandler按拦截器定义逆序调用

afterCompletion按拦截器定义逆序调用

 

postHandler在拦截器链内所有拦截器返成功调用

afterCompletion只有preHandle返回true才调用

2.6. 拦截器应用(登录)

2.6.1. 编写登录jsp

2.6.2. 用户登陆Controller

 

 

=

2.6.3. 编写拦截器

2.6.4. 配置拦截器

猜你喜欢

转载自blog.csdn.net/qq_40016949/article/details/80207584