场景
通过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()不调用