4 回答

TA貢獻1725條經(jīng)驗 獲得超8個贊
Optional
in背后的原因findById
是它避免返回null
.
另一方面,空集合可以安全地迭代和處理,因此沒有.throwIfEmpty()
內置的特殊機制??占媳举|上本身就是一個Optional。它不為 null,并且可能包含也可能不包含元素。
如果在您的業(yè)務邏輯中沒有結果意味著錯誤,那么就由您來處理它。

TA貢獻1843條經(jīng)驗 獲得超7個贊
您可以流式傳輸列表,獲取Optional
withfindAny
并映射回列表(如果結果非空):
items.stream().findAny().map((e) -> items).orElseThrow(NotFoundException::new);
但您應該考慮這是否真的需要導致異常。作為搜索功能的消費者,我的期望將是一個空結果,沒有任何元素符合我的標準。

TA貢獻1806條經(jīng)驗 獲得超5個贊
解決方案可能是封裝調用的實用函數(shù)findAll。
public class MyItemNotFoundException ... {
public static <T> List<T> requireNotEmpty(List<T> items) throws MyItemNotFoundException {
if (items.isEmpty()) {
throw new MyItemNotFoundException();
}
return items;
}
}
@GetMapping("/items")
List<MyItem> all() {
return MyItemNotFoundException.requireNotEmpty(repository.findAll());
}
將函數(shù)放在 MyItemNotFoundException 中可讀性不太好。更好的名字仍然感覺不自然:
return MyItemNotFoundException.whenEmpty(repository.findAll());
但是您會找到一個位置,也許在某個基類/接口中。
(在某系統(tǒng)中,存儲庫 findAll 可能返回 null(非常難看),并且使用這樣的包裝函數(shù)也可以處理。)

TA貢獻1818條經(jīng)驗 獲得超3個贊
通過 REST,您應該返回以下內容:
找不到單個元素:拋出異常 - 映射 404 響應代碼
空列表:返回帶有 - 200 狀態(tài)碼的空列表
添加回答
舉報