Java 在Spring Boot中处理异常的最佳方法是什么?

Java 在Spring Boot中处理异常的最佳方法是什么?,java,spring-boot,exception,controller-advice,Java,Spring Boot,Exception,Controller Advice,我正在用Spring Boot开发一个应用程序。我想知道处理异常的最佳方法是什么。下面是我的代码 ExceptionHandler.java 我正在使用@ControllerAdvice。最好用什么@ControllerAdvice或@RestControllerAdvice @ControllerAdvice public class ExceptionHandler { @ExceptionHandler(NotFoundException.class) public Re

我正在用Spring Boot开发一个应用程序。我想知道处理异常的最佳方法是什么。下面是我的代码

ExceptionHandler.java
我正在使用
@ControllerAdvice
。最好用什么
@ControllerAdvice
@RestControllerAdvice

@ControllerAdvice
public class ExceptionHandler {

    @ExceptionHandler(NotFoundException.class)
    public ResponseEntity<ErrorResponse> notFound(NotFoundException notFoundException) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.NOT_FOUND, notFoundException.getMessage());
        return new ResponseEntity<ErrorResponse>(errorResponse, HttpStatus.NOT_FOUND);
    }
}
Controller.java
中,代码如下:

@Override
public User update(User newUser) throws NotFoundException {
    Optional<User> user = userRepository.findById(newUser.getId());

    if (!user.isPresent()) throw new NotFoundException("Record Not Found!");

    return userRepository.save(newUser);
}
@PutMapping
public User update(@RequestBody User user) {
    User updatedUser = userService.update(user);

    if (updatedUser == null) throw new SomeOtherException("Exception while Updating!");
    
    return updatedUser;
}
所以我的问题是


上述方法不好吗?在服务层抛出异常可以吗?它会被
@controlleradvice
自动捕获吗?还是只需要在控制器中输入?我正在寻求处理异常的最佳实践。有人能帮我吗?提前谢谢。

你用的方式很好

由于@ControllerAdvice/@RestControllerAdvice用于在整个控制器[flow]中全局处理异常

您还可以在@Service layel中抛出异常。[这是同一件事] 控制员会抓住它的


您可以用自己的方式自定义例外情况。

我也喜欢您的方法。也许你也想看看Lombok和@Skillythrows:我觉得没有必要在方法上抛出XYZ,但最终你还是要全局处理它们。

非常感谢你的回答和时间。