背景
在項目中需求拾并,對所有的請求進行攔截進行統(tǒng)一處理。優(yōu)先想到的是使用spring boot的攔截器鹏浅。但經(jīng)實踐發(fā)現(xiàn)嗅义,spring boot的攔截器只能在preHandle
設(shè)置響應(yīng)頭,而在postHandle
中沒法改變響應(yīng)頭隐砸,也就無法實現(xiàn)按處理結(jié)果來設(shè)置響應(yīng)頭的目的之碗,經(jīng)查詢資料,了解到攔截器無法設(shè)置帶有@RequestBody
注解的controller中的響應(yīng)數(shù)據(jù)季希。具體細(xì)節(jié)有待深入研究褪那。
之后的解決方法
擴展了ResponseBodyAdvice
接口,并用@ControllerAdvice
進行注解式塌。最終實現(xiàn)了達到了封裝響應(yīng)數(shù)據(jù)武通、修改響應(yīng)頭的目的。代碼如下:
@ControllerAdvice
public TestAdvice implements ResponseBodyAdvice<Object> {
@Override
public boolean supports(參數(shù)省略) {
return true珊搀;
}
@Override
public Object beforeBodyWrite(參數(shù)省略) {
//這里面進行修改body冶忱、或者response header
}
}