Spring Boot如何处理异常?
时间: 2023-07-20 12:32:40 浏览: 147
Spring Boot提供了多种方式来处理异常,包括全局异常处理、自定义异常和统一异常处理等。
1. 全局异常处理
全局异常处理是指通过`@ControllerAdvice`注解定义一个全局异常处理器,来处理整个应用程序中的异常。全局异常处理器可以处理所有控制器中抛出的异常,包括未被捕获的异常。全局异常处理器通常会返回一个错误页面或JSON数据,提示用户出现了异常。
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ModelAndView handleException(Exception e) {
ModelAndView mav = new ModelAndView("error");
mav.addObject("message", e.getMessage());
return mav;
}
}
```
2. 自定义异常
自定义异常是指通过继承`RuntimeException`或其子类来定义自己的异常类。自定义异常通常包含一些业务相关的信息,比如错误码、错误信息等。在抛出异常时,可以使用自定义异常类来传递这些信息。
```java
public class MyException extends RuntimeException {
private int code;
private String message;
public MyException(int code, String message) {
this.code = code;
this.message = message;
}
// getter & setter
}
```
```java
@GetMapping("/{id}")
public User getUser(@PathVariable Long id) {
User user = userRepository.findById(id)
.orElseThrow(() -> new MyException(404, "User not found"));
return user;
}
```
3. 统一异常处理
统一异常处理是指通过继承`ResponseEntityExceptionHandler`类,重写其方法来实现异常处理。统一异常处理可以根据不同的异常类型,返回不同的HTTP状态码和错误信息。
```java
@RestControllerAdvice
public class RestExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(MyException.class)
public ResponseEntity<Object> handleMyException(MyException e) {
ErrorResponse errorResponse = new ErrorResponse(e.getCode(), e.getMessage());
return new ResponseEntity<>(errorResponse, HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<Object> handleException(Exception e) {
ErrorResponse errorResponse = new ErrorResponse(500, "Internal server error");
return new ResponseEntity<>(errorResponse, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
```
总之,Spring Boot提供了多种方式来处理异常,包括全局异常处理、自定义异常和统一异常处理等。开发者可以根据自己的需求选择合适的方式来处理异常。
阅读全文