背景
在项目中需求,对所有的请求进行拦截进行统一处理。优先想到的是使用spring boot的拦截器。但经实践发现,spring boot的拦截器只能在preHandle设置响应头,而在postHandle中没法改变响应头,也就无法实现按处理结果来设置响应头的目的,经查询资料,了解到拦截器无法设置带有@RequestBody注解的controller中的响应数据。具体细节有待深入研究。
之后的解决方法
扩展了ResponseBodyAdvice接口,并用@ControllerAdvice进行注解。最终实现了达到了封装响应数据、修改响应头的目的。代码如下:
@ControllerAdvice
public TestAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(参数省略) {
return true;
}
@Override
public Object beforeBodyWrite(参数省略) {
//这里面进行修改body、或者response header
}
}