当系统上线后,用户在发送请求时难免会出现异常,然后异常信息直接面向用户,则对用户来说有些不友好,于是定义了一个统一异常的处理器,这样所有加了@Controller注解的方法都可以进行异常的统一处理
首先自定义控制器异常统一处理类 AllExceptionHandler
//对加了@Controller注解的方法进行拦截处理 AOP的实现
@ControllerAdvice
public class AllExceptionHandler {
//进行异常处理,处理Exception.class的异常
@ExceptionHandler(Exception.class)
@ResponseBody //返回json数据,如果不加就是返回页面,也就是对于该代码而言,如果不加@ResponseBody,系统同样报404
public Result doException(Exception ex){
ex.printStackTrace();
return Result.fail(-999,"系统异常"); //提示文字
}
}
效果演示
请求articles/hot
接口(该接口存在)
不加统一异常处理,请求articles/hot1
接口(该接口不存在)
加统一异常处理,请求articles/hot1
接口(该接口不存在)
注:
参考文章:@ControllerAdvice和@RestControllerAdvice的区别
在Spring 3.2中,新增了@ControllerAdvice、@RestControllerAdvice
注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute
,并应用到所有@RequestMapping、@PostMapping、@GetMapping
注解中。
@ControllerAdvice
是@Controller
的一个增强版,可以实现三个方面的功能:全局异常处理、全局数据绑定、全局数据预处理。
通俗而言,@RestControllerAdvice
= @ControllerAdvice
+@ResponseBody
如果全部异常处理返回json,那么可以使用 @RestControllerAdvice
代替 @ControllerAdvice
,这样在方法上就可以不需要添加 @ResponseBody
。
@RestControllerAdvice
public class AllExceptionHandler {
//进行异常处理,处理Exception.class的异常
@ExceptionHandler(Exception.class)
//@ResponseBody //返回json数据
public Result doException(Exception ex){
ex.printStackTrace();
return Result.fail(-999,"系统异常");
}
}
上面代码的实现效果,和该代码是一样的