RequestBodyAdvice和ResponseBodyAdvice
来源:互联网 发布:linux delay 头文件 编辑:程序博客网 时间:2024/06/04 01:23
RequestBodyAdvice和ResponseBodyAdvice
这是spring 4.2新加的两个接口,这两个接口有些什么作用呢?先看看这两个接口
RequestBodyAdvice
public interface RequestBodyAdvice { boolean supports(MethodParameter methodParameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType); Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType); HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException; Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class<? extends HttpMessageConverter<?>> converterType);}
查看一下谁调用了这个接口的这些方法,可以看到AbstractMessageConverterMethodArgumentResolver的readWithMessageConverters()方法调用了这个接口的方法。
//代码片段for (HttpMessageConverter<?> converter : this.messageConverters) { Class<HttpMessageConverter<?>> converterType = (Class<HttpMessageConverter<?>>) converter.getClass(); if (converter instanceof GenericHttpMessageConverter) { GenericHttpMessageConverter<?> genericConverter = (GenericHttpMessageConverter<?>) converter; if (genericConverter.canRead(targetType, contextClass, contentType)) { if (logger.isDebugEnabled()) { logger.debug("Read [" + targetType + "] as \"" + contentType + "\" with [" + converter + "]"); } if (inputMessage.getBody() != null) { inputMessage = getAdvice().beforeBodyRead(inputMessage, param, targetType, converterType); body = genericConverter.read(targetType, contextClass, inputMessage); body = getAdvice().afterBodyRead(body, inputMessage, param, targetType, converterType); } else { body = null; body = getAdvice().handleEmptyBody(body, inputMessage, param, targetType, converterType); } break; } }
可以看到这接口的方法,主要是在HttpMessageConverter处理request body的前后做一些处理,和body为空的时候做处理。
而AbstractMessageConverterMethodArgumentResolver的实现类有
HttpEntityMethodProcessor(处理controller的方法参数是HttpEntity或RequestEntity的)、
RequestResponseBodyMethodProcessor(处理方法参数有@RequestBoyd的)、
RequestPartMethodArgumentResolver(处理方法参数是@RequestPart或MultipartFile,javax.servlet.http.Part)。
从这个可以看出,我们可以在使用这些HandlerMethodArgumentResolver的时候,我们能对request body进行前处理,和解析后处理。
RequestBodyAdvice怎么用
首先一个实现类,实现RequestBodyAdvice,后在类上加上注解@ControllerAdvice,比如有些请求的参数需要做加密处理,可以在此将json串解密处理,在处理
ResponseBodyAdvice
public interface ResponseBodyAdvice<T> {boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType);T beforeBodyWrite(T body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response);}
此可以对@ResponseBody的返回结果在输出到响应之前做处理
- RequestBodyAdvice和ResponseBodyAdvice
- RequestBodyAdvice 记录HTTP 请求
- Spring MVC 4.1 使用ResponseBodyAdvice支持jsonp
- ResponseBodyAdvice 统一处理返回值/响应体
- SpringMVC 4.1使用ResponseBodyAdvice支持jsonp
- . 和 ->
- || 和&&
- .和::
- “?”和“!”
- #和##
- && 和 ||
- 、和
- #和##
- .//和..//
- 和
- ?和\?
- ./ 和 ../
- #和##
- Matlab学习 ---图像旋转(最邻近像素法)
- Linux 文件基本属性
- Web端即时通讯技术盘点:短轮询、Comet、Websocket、SSE
- MYSQL第一谈:ubuntu下如何安装MYSQL
- 解决hive注释中文乱码
- RequestBodyAdvice和ResponseBodyAdvice
- java 定时任务Timer
- solr版本升级说明
- MD5加密
- epoll
- 动态网页
- Android 之 USB Host 串口编程
- viewpager+fragment+slidingmenu滑动卡顿解决方法
- UnityShader案例(二)——Phong高光反射