@ControllerAdvice,是Spring3.2提供的新註解,它是一個Controller加強器,可對controller中被 @RequestMapping註解的方法加一些邏輯處理。最經常使用的就是異常處理json
須要配合@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"); } }
分別訪問testException
和testMyException
接口,可獲得如下結果app
{"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; }
這樣子很方便吧~this
若是以爲不錯,分享給你的朋友!spa
THANDKScode
一個立志成大腿而天天努力奮鬥的年輕人接口
伴學習伴成長,成長之路你並不孤單!rem