版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/canyanruxue/article/details/81707182
本来想通过实现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;
}