spring提供了3种方式将异常转化为响应
- 特定spring异常将会自动映射为指定的http状态码
- 异常上可以添加@responseStatus注释,从而讲将其映射为某一个http状态码.
- 在方法上可以添加@ExceptionHandler注释,使其用来处理异常.
以上异常一般由spring自身抛出,作为DispatchServlet处理过程中或执行校验时出现问题的结果.
但是 ,如果多个 控制器类中都要抛出某个特定的异常,那么在所有 的控制器方法中 都要重复相同的@ExceptionHandler方法.
spring 解决方法:控制器通知
控制器通知是带有@ControlAdvice注解的类,这个类 会包含一个或多个如下类型的方法 :
- @ExceptionHandler 注解标注的方法
- @InitBinder
- @ModelAttribute
在带有@ControllerAdvice注解的类中 ,以上所述的这些方法会运用到 程序所有控制器 中带有@requestMapping注解的方法上
@controlAdvice注解本身已经使用了@component ,因此@controllerAdvice注解所标注的类将会被组件扫描获取到(与带有compent注解的类一样)
@ControlAdvice最为使用的一个场景就是将所有的@ExceptionHandler方法收集到一个类中,这样所有控制器的异常就能 在一个地方进行一致的处理 .