ResponseBodyAdvice踩坑

时间:2025-04-25 08:02:20
场景

通过ResponseBodyAdvice实现Rest接口的日志统一管理

正文

ResponseBodyAdvice原理自己百度,代码比较少但是我实践的时候发现有几个坑需要注意一下

@RestControllerAdvice(basePackages = "")
public class ApiResponseBodyAdvice implements ResponseBodyAdvice {
    static org. logger = ("logback_api");

    @Override
    public boolean supports(MethodParameter returnType, Class converterType) {
        return (((), ) ||
                ());
    }

    @Override
    public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
                  Class selectedConverterType, ServerHttpRequest serverHttpRequest, ServerHttpResponse response) {
        HttpServletRequest request = ((ServletRequestAttributes) (())).getRequest();
        if(request != null){
            Object obj = ().getAttribute(BaseController.session_user);
            String path = ();
            if ((path)) {
                path = ();
            }
            if (obj != null) {
                path = ();
                ("userId:"+ ((DataUser) obj).getUserId());
            }
            ("url:"+ path);
            ("request:"+ (()));
            ("response:"+body);
        }
        return body;
    }
}

没了就这么简单

生效可能情况

bean没有scan,没有什么配置
2.如果Controller的注解为@Controller,生效的方法为@ResponseBody
()支持类型返回false,beforeBodyWrite()不调用