如何解决在Spring Boot中处理异常的最佳方法是什么?
我正在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
会自动捕获异常吗?还是只需要扔进控制器?我正在寻求处理异常的最佳实践。那么有人可以帮助我吗?预先感谢。
解决方法
您使用的方式非常好。
由于 @ ControllerAdvice / @ RestControllerAdvice 用于在整个控制器[流程]中全局处理异常。
您也可以在@Servicelayel中引发异常。 [那是同一件事] ControllerAdvice会捕获它。
您可以用自己的方式自定义例外。
,我也喜欢您的方法。也许您也想看看Lombok和@SneakyThrows:我发现不必要在方法上抛出XYZ,而最终无论如何都要全局处理它们。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。