@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