@RestControllerAdvice和ResponseBodyAdvice统一处理controller层接口返回
1. 理论知识
要对controller层的内容进行统一返回,需要用到 @ControllerAdvice ResponseBodyAdvice
- @RestControllerAdvice
一个方便的注释,它本身带有@ControllerAdvice和@ResponseBody注释,携带此注释的类型被视为控制器通知 总之,它就是对controller层的方法加强
- ResponseBodyAdvice
允许在@ResponseBody或ResponseEntity控制器方法执行之后,但在使用HttpMessageConverter编写body之前定制响应
简单理解:ResponseBodyAdvice接口是在controller层方法执行之后,在response返回给前端数据之前对reponse的数据进行处理,可以对数据进行统一的处理,从而可以使返回数据格式一致。
2. 举例说明
- 2.1 编写统一返回数据格式代码
@RestControllerAdvice
@Slf4j
public class UnifiedAdvice implements ResponseBodyAdvice {
@Override
public boolean supports(MethodParameter returnType, Class converterType) {
//若加了@ResponseNotIntercept 则该方法不用做统一的拦截
AnnotatedElement annotatedElement = returnType.getParameterType();
ResponseNotIntercept annotation = AnnotationUtils.findAnnotation(annotatedElement, ResponseNotIntercept.class);
return annotation == null;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {
if (body instanceof CommonResult) return body;
CommonResult<Object> objectCommonResult = new CommonResult

本文介绍了如何使用@RestControllerAdvice和ResponseBodyAdvice在Java Spring MVC中对Controller层的接口返回数据进行统一处理,避免重复封装返回对象。详细解释了ResponseBodyAdvice的工作原理,并通过例子展示了其实现方式。同时,文章还分析了返回字符串时可能出现的ClassCastException问题及其解决方案。
最低0.47元/天 解锁文章
1954

被折叠的 条评论
为什么被折叠?



