HandlerMethodReturnValueHandler處理返回值問題,aop
阿新 • • 發佈:2018-11-08
本來想通過實現HandlerMethodReturnValueHandler介面,對返回值進行處理。(實現了MessageSource,想通過code來獲取Message中的值)但是呢,死活成功不了。本以為Bean沒有載入,但是看了一下日誌,Bean都有了。
debug了一下原始碼:發現之所以處理不了是因為被搶了,在selectHandler方法中,選取了RequestResponseBodyMethodProcessor作為返回值的處理方法(因為我的controller方法註解了@ResponseBody)。
我自己寫的Handler是ResultReturnHandler,在List的14地址下,所以selectHandler按順序先選取了RequestResponseBodyMethodProcessor。
所以本來的目的通過code來獲取Message不太好通過HandlerMethodReturnValueHandler實現了
只好寫一個aspect了
通過對返回值型別為Result的攔截,實現需要的結果
@Around("execution(tech.yiyehu.framework.front.utils.Result *.*(..))")
public Object around(ProceedingJoinPoint point) throws Throwable {
Result result = null;
try{
result = (Result) point.proceed();
if(result.get("msg")==null||"".equals(result.get("msg"))){
if(result.get("parameters")!=null){
result.put("msg",messageSource.getMessage(result.get("code").toString(),
(Object[])result.get("parameters" ),
LocaleContextHolder.getLocale()));
}else{
result.put("msg",messageSource.getMessage(result.get("code").toString(),
null,
LocaleContextHolder.getLocale()));
}
}
}catch (Exception e){
logger.error("MessageSource處理異常", e);
throw new Exception("MessageSource處理異常");
}
return result;
}