第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

處理 findAll() 上的空結果:列表是否有 orElseThrow() ?

處理 findAll() 上的空結果:列表是否有 orElseThrow() ?

暮色呼如 2023-08-04 17:33:43
我正在創(chuàng)建一個小型 Spring REST 服務。我有一個findById()電話:@GetMapping("/items/{id}")MyItem one(@PathVariable String id) {    return repository.findById(id).orElseThrow(() -> new MyItemNotFoundException(id));}如果沒有給定的 MyItem 對象id,我將使用該方法拋出異常Optional<T>.orElseThrow()。這非常有用而且非常簡單?,F(xiàn)在我添加了findAll()來自PagingAndSorting<T, ID>存儲庫的調用:@GetMapping("/items")List<MyItem> all() {                return repository.findAll();}是否有一種簡單的方法來處理空列表輸出,其方式與處理單個項目類似?或者我需要創(chuàng)建類似的東西:@GetMapping("/items")List<MyItem> all() {        List<MyItem> items = repository.findAll();    if  (items.isEmpty())        throw new MyItemNotFoundException();            return items;}(真實用例處理一些請求參數(shù)來過濾整個列表)
查看完整描述

4 回答

?
qq_遁去的一_1

TA貢獻1725條經(jīng)驗 獲得超8個贊

Optionalin背后的原因findById是它避免返回null.

另一方面,空集合可以安全地迭代和處理,因此沒有.throwIfEmpty()內置的特殊機制??占媳举|上本身就是一個Optional。它不為 null,并且可能包含也可能不包含元素。

如果在您的業(yè)務邏輯中沒有結果意味著錯誤,那么就由您來處理它。


查看完整回答
反對 回復 2023-08-04
?
藍山帝景

TA貢獻1843條經(jīng)驗 獲得超7個贊

您可以流式傳輸列表,獲取OptionalwithfindAny并映射回列表(如果結果非空):

items.stream().findAny().map((e) -> items).orElseThrow(NotFoundException::new);

但您應該考慮這是否真的需要導致異常。作為搜索功能的消費者,我的期望將是一個空結果,沒有任何元素符合我的標準。


查看完整回答
反對 回復 2023-08-04
?
忽然笑

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ù)也可以處理。)



查看完整回答
反對 回復 2023-08-04
?
泛舟湖上清波郎朗

TA貢獻1818條經(jīng)驗 獲得超3個贊

通過 REST,您應該返回以下內容:

  • 找不到單個元素:拋出異常 - 映射 404 響應代碼

  • 空列表:返回帶有 - 200 狀態(tài)碼的空列表


查看完整回答
反對 回復 2023-08-04
  • 4 回答
  • 0 關注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號