SpringMVC异常处理
将异常映射为状态码
- 定义一个异常类
- 用
@ResponseStatus
注解标注异常类。
@ResponseStatus
接受两个参数:
- value, 表示状态码
- reason, 表示原因
当应用抛出@ResponseStatus
注解标注的异常类时,SpringMVC会将异常映射为状态码
手动处理异常——单控制器异常处理
- 如果某控制器抛出异常需要处理,则在此控制器里定义一个异常处理方法
- 用
@ExceptionHandler
注解标注异常处理方法
@ExceptionHandler
需要传入特定异常类作为参数。当控制器某个方法抛出异常,@ExceptionHandler
方法将捕获并处理这个异常。
这种处理方法的缺点是,它只能处理单一控制器抛出的异常。如果多个控制器抛出相同的异常,则必须在每个控制器中定义@ExceptionHandler
方法才能处理异常
手动处理异常——多控制器异常处理
- 定义控制器通知类(使用@ControllerAdvice注解表注 标注)
- 编写处理方法
处理方法通过@ExceptionHandler
、@InitBinder
、@ModelAttribute
注解标注
@ControllerAdvice
注解本身已经使用了@Component
,因此@ControllerAdvice
注解所标注的类将会自动被组件扫描获取到