如何在 Spring Boot 中处理异常 详细
时间: 2024-05-10 11:16:46 浏览: 150
在 Spring Boot 中,可以使用 @ControllerAdvice 和 @ExceptionHandler 注解来统一处理异常。
@ControllerAdvice 注解用于定义一个全局的异常处理器,它可以定义多个 @ExceptionHandler 方法来处理不同类型的异常。@ExceptionHandler 注解用于指定处理哪些异常类型的方法。
下面是一个简单的示例:
```java
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("服务器内部错误");
}
@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<String> handleUserNotFoundException(UserNotFoundException e) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
}
}
```
在上面的示例中,@ExceptionHandler 注解用于处理 Exception 类型的异常和 UserNotFoundException 类型的异常。当出现这些异常时,Spring Boot 会调用对应的方法并返回指定的 ResponseEntity。
另外,还可以通过 @ControllerAdvice 注解的 basePackages 属性指定需要处理异常的包,如:
```java
@ControllerAdvice(basePackages = "com.example.controller")
public class GlobalExceptionHandler {
// ...
}
```
这样,只有 com.example.controller 包下的异常才会被该异常处理器处理。
除了 @ControllerAdvice 和 @ExceptionHandler,还可以使用 @ResponseStatus 注解来指定异常的状态码和原因短语,如:
```java
@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserNotFoundException extends RuntimeException {
public UserNotFoundException(Long id) {
super(String.format("User with id '%d' not found", id));
}
}
```
上面的示例中,当出现 UserNotFoundException 异常时,Spring Boot 会返回 404 状态码和 "Not Found" 原因短语。
总之,在 Spring Boot 中处理异常非常方便,只需要使用几个注解就可以实现全局异常处理,提高应用的健壮性和可靠性。
阅读全文