首页 > 解决方案 > 在 Spring Boot 应用程序中处理或抛出异常的最佳实践是什么?

问题描述

我使用 Spring Boot 开发了一个 rest api。在我的一种服务方法中,我抛出一个ServletException,以防找不到特定用户。我想知道这是否是最好的方法,我的意思是,这是抛出异常的正确层吗?

标签: javaspring-bootexception-handling

解决方案


创建自定义异常类型比使用ServletException. 为了处理异常,您可以使用@ControllerAdvice. 首先创建自定义异常类型:

public class UserNotFoundException extends RuntimeException {

  public UserNotFoundException(String message) {
    super(message);
  }
}

假设您的控制器和服务看起来或多或少是这样的:

@RestController
@RequestMapping("users")
class UserController {

  private final UserService userService;

  UserController(UserService userService) {
    this.userService = userService;
  }

  @GetMapping
  List<String> users() {
    return userService.getUsers();
  }
}

@Service
class UserService {

  List<String> getUsers() {
    // ...
    throw new UserNotFoundException("User not found");
  }
}

你可以处理你UserNotFoundException使用@ControllerAdvice

@ControllerAdvice
class CustomExceptionHandler {

  @ExceptionHandler({UserNotFoundException.class})
  public ResponseEntity<Object> handleUserNotFoundException(UserNotFoundException exception) {
    return new ResponseEntity<>(exception.getMessage(), HttpStatus.NOT_FOUND);
  }
}

推荐阅读