…
}
复制代码
一般传统的做法是在 Controller
层方法直接接收ApiRequest
参数和直接返回ApiResult
的实例:
-
在参数中传入
ApiRequest
对象,然后手动获取业务参数data
进行处理 -
每个接口手动生成
ApiResult
对象并返回。
这一部分工作其实是重复也无太多意义的,那么有没有一种方法可以自动做到 我们只关注 ApiRequest.data
和 ApiResult.data
,让程序自动将参数传入到 业务参数data
中和 控制层方法只返回data
,程序自动封装成ApiResult
并返回呢?那么今天的主人公 RequestBodyAdvice
,ResponseBodyAdvice
就登场了。
RequestBodyAdvice
RequestBodyAdvice
是SpringMVC
4.2提供的一个接口,它允许请求体被读取并转换为对象,并将处理结果对象作为@RequestBody
参数或者 @HttpEntity
方法参数。由此可见,它的作用范围为:
-
使用
@RequestBody
进行标记的参数 -
参数为
HttpEntity
提供的方法
boolean supports(MethodParameter methodParameter, Type targetType,
Class<? extends HttpMessageConverter<?>> converterType);
复制代码
该方法返回true
时,才会进去下面的系列方法
HttpInputMessage beforeBodyRead(HttpInputMessage inputMessage, MethodParameter parameter,
Type targetType, Class<? extends HttpMessageConverter<?>> converterType) throws IOException;
复制代码
body数据读取之前调用,一般在此方法中对body数据进行修改
Object afterBodyRead(Object body, HttpInputMessage inputMessage, MethodParameter parameter,
Type targetType, Class<? extends HttpMessageConve