spring处理异常的方式:
- 特定的spring异常会自动应设成状态码
- 可以在自定义的异常类上添加@ResponseStatus(),进行自定义的状态码的定义。参数为要映射的状态码
- 可以通过自定义方法进行异常的处理@ExceptionHandler(),参数为要捕获的异常类
将异常映射为状态码
- 通过自定义异常类,在异常类的类开头添加注解@ResponseStatus,当代码抛出自定义的异常类的错误时进行状态码的映射
- 如下当程序抛出MyException时映射为500
//将异常映射为500
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public class MyException extends RuntimeException{
}
通过处理方法处理异常(只在一个类中)
- 可以直接在业务控制器中添加异常处理的方法,但是这个异常处理的方法只对这个控制器起作用。(如下)
@Controller
public class ExceptionController {
@RequestMapping("/ex")
public String catchAnException(){
if (1==1) {
throw new MyException();
}
return "exception";
}
@ExceptionHandler(MyException.class)
public String myHandler(){
return "exception";
}
}
也可以将所有的异常处理类定义在一个类中(控制器通知)
- 控制器通知,在类上添加注解@ControllerAdvice进行标注,这个注解包含@Component。
- 控制器通知可以应用到整个系统中。
//控制器通知
@ControllerAdvice
public class MyExceptionHandler {
//当程序中任意地方抛出MyException,该方法都会进行处理
@ExceptionHandler(MyException.class)
public String myHandler(){
return "exception";
}
}