java - NoSuchElementException 是 ResourceNotFoundException 的一个很好的替代品吗?

标签 java spring-boot exception-handling spring-data

在 Spring-Boot 和 Spring-Data 2.0 之前,我使用 org.springframework.boot.context.config.ResourceNotFoundException 检查实体实例是否在数据库中。我在 Controller 中使用了以下异常处理程序:

@ExceptionHandler(ResourceNotFoundException.class)
public HttpStatus handleNotFoundResource() {
    return HttpStatus.NOT_FOUND;
}

现在,因为存储库方法返回一个可选的,我使用 java.util.NoSuchElementException 在 Controller 中完成这项工作:

@ExceptionHandler(NoSuchElementException.class)
public HttpStatus handleNotFoundResource() {
    return HttpStatus.NOT_FOUND;
}

这是最佳实践吗?

最佳答案

NoSuchElementException 比您定义为在特定情况下抛出的自定义异常 ResourceNotFoundException 范围更广:数据库中没有实体/资源。
在 Controller 和存储库层之间,除了 Repository.findXXX().get()

所以你的想法可能会产生不良的副作用。
为防止任何回归,您应该显式处理 Optional 解包,例如 return Optional.orElseThrown(ResourceNotFoundException::new)
如果您想概括它,您可以为您的存储库引入一个基类来执行此处理。

关于java - NoSuchElementException 是 ResourceNotFoundException 的一个很好的替代品吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51988322/

相关文章:

java - 如何在html中设置@modelattribute boolean 值

java - 模拟多个静态方法

java - GUI - ActionListener 的构造函数,如何使它们工作?

java - Spring Boot - 根据要求四舍五入双 PathVariable

java - 如何通过jpql中的属性(name_techno)查找数据

ruby-on-rails - Rails 3 异常通知中的自定义部分

sql - NVL 或 EXCEPTION NO_DATA_FOUND

java - Selenium WebDriver 按部分类名查找元素

java - 组织.hibernate.HibernateException : Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

xslt - XSLT 异常处理技术