@ControllerAdvice實現優雅地處理異常

@ControllerAdvice,是Spring3.2提供的新註解,它是一個Controller增強器,可對controller中被 @RequestMapping註解的方法加一些邏輯處理。最常用的就是異常處理

統一異常處理

需要配合@ExceptionHandler使用。
當將異常拋到controller時,可以對異常進行統一處理,規定返回的json格式或是跳轉到一個錯誤頁面

//全局異常捕捉處理
@ControllerAdvice
public class CustomExceptionHandler {

    @ResponseBody
    @ExceptionHandler(value = Exception.class)
    public Map errorHandler(Exception ex) {
        Map map = new HashMap();
        map.put("code", 400);
        //判斷異常的類型,返回不一樣的返回值
        if(ex instanceof MissingServletRequestParameterException){
            map.put("msg","缺少必需參數:"+((MissingServletRequestParameterException) ex).getParameterName());
        }
        else if(ex instanceof MyException){
            map.put("msg","這是自定義異常");
        }
        return map;
    }
}
//自定義異常類
@Data
public class MyException extends RuntimeException {
    private long code;
    private String msg;

    public MyException(Long code, String msg){
        super(msg);
        this.code = code;
        this.msg = msg;
    }

    public MyException(String msg){
        super(msg);
        this.msg = msg;
    }
}
@RestController
public class TestController {
    @RequestMapping("testException")
    public String testException() throws Exception{
        throw new MissingServletRequestParameterException("name","String");
    }

    @RequestMapping("testMyException")
    public String testMyException() throws MyException{
        throw new MyException("i am a myException");
    }
}

分別訪問testExceptiontestMyException接口,可得到以下結果

{"msg":"缺少必需參數:name","code":400}
{"msg":"這是自定義異常","code":400}

如果不需要返回json數據,而要渲染某個頁面模板返回給瀏覽器,那麼可以這麼實現:

@ExceptionHandler(value = MyException.class)
public ModelAndView myErrorHandler(MyException ex) {
    ModelAndView modelAndView = new ModelAndView();
    //指定錯誤頁面的模板頁
    modelAndView.setViewName("error");
    modelAndView.addObject("code", ex.getCode());
    modelAndView.addObject("msg", ex.getMsg());
    return modelAndView;
}

這樣子很方便吧~

如果覺得不錯,分享給你的朋友!

THANDKS

  • End -

一個立志成大腿而每天努力奮鬥的年輕人

伴學習伴成長,成長之路你並不孤單!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章