ReponseBodyAdvice的作用

doMore 687 2019-11-26

ResponseBodyAdvice

根据官方文档,该接口是允许定制对返回结果的处理,处理过程在控制器中 @ResponseBody 或者 ResponseEntity 方法执行之后, HttpMessageConverter 写入信息之前。
该接口的实现可以直接在 RequestMappingHandlerAdpter 和 ExceptionHandlerExceptionResolver 中注册,或者使用 @ControllerAdvice 注解标注, 前面两者会自动识别。

// 该组件是否支持给定的控制器方法返回类型和选择的HttpMessageConverter类型。
boolean supports(MethodParameter var1, Class<? extends HttpMessageConverter<?>> var2);
// 在选择HttpMessageConverter之后,以及在调用其写方法之前调用它。
@Nullable
T beforeBodyWrite(@Nullable T var1, MethodParameter var2, MediaType var3, Class<? extends HttpMessageConverter<?>> var4, ServerHttpRequest var5, ServerHttpResponse var6);

TIPS:
RequestMappingHandlerAdpter 和 ExceptionHandlerExceptionResolver 可以创建一个配置类,使用spring容器注入。两者当中都有 setResponseBodyAdvice方法可以添加。
1)RequestMappingHandlerAdpter中requestBodyAdvice和responseBodyAdvice其实是一个list。
2)ExceptionHandlerExceptionResolver 中只有responseBodyAdvice 集合。
个人认为:
改接口的功能在 aop 中也能够做,spring提供这个接口就是为了降低耦合性,将不同的功能分开。