背景
在项目中需求,对所有的请求进行拦截进行统一处理。优先想到的是使用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
}
}
网友评论