在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ springAOP如何切面rpc調(diào)用之后,對返回參數(shù)進行判斷,有問題直接返回co

springAOP如何切面rpc調(diào)用之后,對返回參數(shù)進行判斷,有問題直接返回controller,沒問題繼續(xù)執(zhí)行

下面是我們實際項目中的代碼

@PostMapping("queryLeagueBettingObjectList")
public ResultBean queryLeagueBettingObjectList(@RequestBody LeagueBettingObjectQueryVO queryVO) {
    //獲取數(shù)據(jù)
    Result<List<LeagueBettingObjectQueryResultDTO>> result = leagueBettingObjectControlService
            .queryLeagueBettingObjectList(queryVO.toDTO());
    if (result.hasError()){
        return new ResultBean(result);
    }
    //數(shù)據(jù)轉(zhuǎn)換
    List<LeagueBettingObjectQueryResultVO> list = LeagueBettingObjectQueryResultVO.dtoListToVOList(result.getArgs());
    return new ResultBean(list);
}
    

我想把下面的這部分代碼通過切面完成,但是不太明白該怎么寫,能否請各位給個例子,或者相關(guān)文檔,我找了一些文檔都是切controller的,而且不知道怎么直接return和怎么繼續(xù)執(zhí)行

if (result.hasError()){
    return new ResultBean(result);
}

我想做的就是如果有錯誤通過切面直接返回,如果沒有錯誤代碼繼續(xù)執(zhí)行

回答
編輯回答
伐木累

針對錯誤異常,你可以定義不同的項目自定義異常,類似AOP校驗異常,Token校驗異常,項目全局異常等
通過Handler進行捕獲,并返回對應(yīng)格式要求的數(shù)據(jù),

如下代碼 我定義了一個全局、一個校驗異常

@Getter
public class SbException extends RuntimeException {

    private Integer code;

    public SbException(ResultEnum resultEnum){
        super(resultEnum.getMessage());

        this.code = resultEnum.getCode();
    }

    public SbException(Integer code, String message){
        super(message);

        this.code = code;
    }
}

public class SbAuthorizeException extends RuntimeException {

}

接著定義handler

@ControllerAdvice
public class SbExceptionHandler {

    @Autowired
    private ProjectUrlConfig projectUrlConfig;

    //攔截登錄異常
    @ExceptionHandler(value = SbAuthorizeException.class)
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public ModelAndView handlerAuthorizeException(){
        return new ModelAndView("redirect:"
                .concat(projectUrlConfig.getWechatOpenAuthorize())
                .concat("/sb/wechat/qrAuthorize")
                .concat("?returnUrl=")
                .concat(projectUrlConfig.getSb())
                .concat("/sb/seller/login"));
    }

    //全局異常
    @ExceptionHandler(value = SbException.class)
    @ResponseBody
    public ResultVO handlerSbException(SbException e){
        return ResultVOUtil.error(e.getCode(),e.getMessage());
    }

    // Http狀態(tài)碼異常返回
    @ExceptionHandler(value = ResponseBankException.class)
    @ResponseStatus(HttpStatus.FORBIDDEN)//403
    public void handleResponseBankException(){

    }

    //未知系統(tǒng)異常
    @ExceptionHandler(value = Exception.class)
    @ResponseBody
    public ResultVO handlerException(Exception e){
        return ResultVOUtil.error(666,e.getMessage());
    }

}

這樣你只需要在對應(yīng)的地方或業(yè)務(wù)執(zhí)行錯誤時拋出對應(yīng)的異常即可

2017年4月8日 18:43