本文主要是介绍Spring的 @ControllerAdvice 之 ResponseBodyAdvice对响应结果进行增强,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Spring的 @ControllerAdvice 之 ResponseBodyAdvice对响应结果进行增强
- 1. 使用背景
- 2. 使用方法
- 3. 结果
1. 使用背景
对响应结果进行统一结果处理时,有时会出现有的接口未进行封装,为了解决该问题,可使用@ControllerAdvice 注解对响应结果进行aop编程增强。
2. 使用方法
package com.banneroa.utils;import cn.hutool.core.annotation.AnnotationUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;/*** @author rjj* @date 2023/10/21 - 8:58*/
@ControllerAdvice
public class ResponseResultHandler implements ResponseBodyAdvice<Object> {//对符合条件的响应进行处理@Overridepublic boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {//查看是否有@ResponseBody注解,存在才进行处理if (returnType.getMethodAnnotation(ResponseBody.class) != null|| AnnotationUtils.findAnnotation(returnType.getContainingClass(), ResponseBody.class) != null) {return true;}return false;}@Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class<? extends HttpMessageConverter<?>> selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {if (body instanceof ResponseResult){//如果是统一结果类型不处理return body;}//不是统一类型,进行封装return ResponseResult.okResult(body);}
}
3. 结果
接口示例:
使用@ControllerAdvice 之前:
使用之后:
这篇关于Spring的 @ControllerAdvice 之 ResponseBodyAdvice对响应结果进行增强的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!