java - 处理 findAll() 上的空结果 : Is there a orElseThrow() for lists?

标签 java spring-boot spring-mvc spring-data-jpa crud

我正在创建一个小型 Spring REST 服务。我有一个findById()调用:

@GetMapping("/items/{id}")
MyItem one(@PathVariable String id) {
    return repository.findById(id).orElseThrow(() -> new MyItemNotFoundException(id));
}

如果没有具有给定 id 的 MyItem 对象,我使用 Optional<T>.orElseThrow() 抛出异常方法。这非常有用而且非常简单。

现在我添加了一个findAll()调用PagingAndSorting<T, ID>存储库:

@GetMapping("/items")
List<MyItem> all() {            
    return repository.findAll();
}

是否有一种简单的方法来处理空列表输出,其方式与处理单个项目类似?或者我是否需要创建类似的东西:

@GetMapping("/items")
List<MyItem> all() {    
    List<MyItem> items = repository.findAll();
    if  (items.isEmpty())
        throw new MyItemNotFoundException();        

    return items;
}

(真实用例处理一些请求参数来过滤整个列表)

最佳答案

findById 中的 Optional 背后的原因是它避免返回 null

另一方面,空集合可以安全地迭代和处理,因此没有内置特殊的 .throwIfEmpty() 机制。空集合本质上本身就是一个Optional。它不为 null,并且可能包含也可能不包含元素。

如果在您的业务逻辑中没有结果意味着错误,那么就由您来处理。

关于java - 处理 findAll() 上的空结果 : Is there a orElseThrow() for lists?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57989531/

相关文章:

spring-boot - Spring Cloud 流 + quartz

java - 尽管配置中定义了不正确的 bean 属性名称,Spring 如何检测正确的方法名称?

java - 支持谷歌地图 API v2 和最低 Android 目标版本

java - 如何在javafx中为鼠标单击事件调用相同的方法并输入按键

javascript - 如何从 JavaScript 客户端的 Spring Boot 端点流式传输媒体内容

java - Spring + hibernate : could not initialize proxy no Session - What to do when an exception occured on a DAO?

java - Maven项目构建异常

java - 构建正常,但服务器部署时出错 : XML issue

java - 只要使用 EditText,就会出现连续消息

java - 如何使用 ViewModel 在 Fragment 之间共享数据