我正在创建一个小型 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/