springboot统一异常处理
异常注解介绍:
@ControllerAdvice 如果是返回json数据 则用 RestControllerAdvice,就可以不加 @ResponseBody
@ExceptionHandler(value=Exception.class //捕获全局异常,处理所有不可知的异常
- 创建一个自定义异常
/**
* 自定义异常
*/
public class MyException extends Exception{
public MyException(String message){
super(message);
}
}
- 在TestController中增加测试异常的映射,抛出MyException异常
/**
* 异常测试接口
* @return
* @throws MyException
*/
@RequestMapping("/testException")
public String testException() throws MyException {
System.out.println("测试异常");
throw new MyException("我的异常");
}
-
创建一个全局处理异常的类
@ControllerAdvice 定义全局异常处理类 @ExceptionHandler 指定自定义错误处理方法拦截的异常类型 @ResponseBody 返回JSON类型的数据 /** * 处理异常类 * @ControllerAdvice 注解定义全局异常处理类 * * @ExceptionHandler 指定自定义错误处理方法拦截的异常类型 * * @ResponseBody 指返回JSON类型的数据 */ @ControllerAdvice public class GlobalMyExceptionHandler { @ExceptionHandler(value = Exception.class) @ResponseBody public Object handlerException(HttpServletRequest request, MyException e) { Map<String, Object> map = new HashMap<>(); map.put("code", -1); map.put("msg", e.getMessage()); map.put("url", request.getRequestURI()); return map; } }