HandlerMethodReturnValueHandler处理返回值问题,aop

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
    }

猜你喜欢

转载自blog.csdn.net/canyanruxue/article/details/81707182
今日推荐