通过继承异常类自定义异常:
public class MyException extends RuntimeException {
public MyException(String code, String msg) {
this.code = code;
this.msg = msg;
}
private String code;
private String msg;
// getter & setter
}
编写全局异常处理器并使用@ControllerAdvice修饰:(从名字可以看出该注解用于控制器增强,可以配合ExceptionHandler注解为controller增强异常处理功能)
@ControllerAdvice
public class MyControllerAdvice {
/**
* 拦截捕捉自定义异常 MyException.class
* @param ex
* @return
*/
@ResponseBody
@ExceptionHandler(value = MyException.class) //使用@ExceptionHandler修饰后会作用在所有的@RequestMapping上。
public Map myErrorHandler(MyException ex) {
Map map = new HashMap();
map.put("code", ex.getCode());
map.put("msg", ex.getMsg());
return map;
}
}
最后我们写一个请求处理方法,直接抛出自定义的异常,正常情况下是程序中断,Spring会自动给前端返回error页面,但是自定义了异常处理器后,会按照规定的格式返回数据,例子中是返回了Json格式的数据,当然也可以通过new ModelAndView来返回错误页面。
@RequestMapping("/home")
public String home() throws Exception {
throw new MyException("100001", " 错误");
}