【发布时间】:2021-02-22 03:00:12
【问题描述】:
我正在使用 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);
}
}
并实现服务层@Service如下,
@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);
}
在Controller.java代码如下,
@PutMapping
public User update(@RequestBody User user) {
User updatedUser = userService.update(user);
if (updatedUser == null) throw new SomeOtherException("Exception while Updating!");
return updatedUser;
}
所以我的问题是:
上述方法不好吗?是否可以在服务层抛出异常并且它会被@controlleradvice自动捕获?还是只需要在控制器中抛出?我正在寻找处理异常的最佳实践。
【问题讨论】:
标签: java spring-boot exception controller-advice