1. 程式人生 > >HandlerMethodReturnValueHandler處理返回值問題,aop

HandlerMethodReturnValueHandler處理返回值問題,aop

本來想通過實現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; }