国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

處理Empty Mono的方法

qpwoeiru96 / 1312人閱讀

摘要:在編程中有時候我們需要對做一些特定業務邏輯。諸如的絕大部分都依賴于和都是推送數據詳情請看,如果本身無數據可推送,那么就不會觸發。換句話說內部是不可能得到的。那么怎么做才可以你可以使用的來作為中間值除了之外,還提供了來處理。

在Reactor編程中有時候我們需要對empty Mono做一些特定業務邏輯。下面看一段非reactor編程的代碼:

public void oldCheck(Token token) {
  if (token == null) {
    // business logic
    return;
  }
  if (token.isExpired) {
    // business logic
    return;
  }
  // business logic
  return;
}

如果讓你改成reactor你也許會改成這樣:

public Mono badCheck(Mono tokenMono) {
  return tokenMono
      .flatMap(token -> {
        if (token == null) {
          // CAUTION: You will never be in here
          // business logic
          return Mono.empty();
        }
        if (token.isExpired) {
          // business logic
          return Mono.empty();
        }
        // business logic
        return Mono.empty();
      });
}

上面的示例代碼里的注釋已經寫了if (token == null) {}的這個條件是永遠成立的,這是因為當Mono是empty時,它是不會觸發flatMap的。諸如flatMap的絕大部分Operator都依賴于PublisherMonoFlux都是Pubisher)推送數據(詳情請看javadoc),如果Publisher本身無數據可推送,那么就不會觸發Operator。換句話說flatMap內部是不可能得到null的。

那么怎么做才可以?你可以使用Java 8的Optional來作為中間值:

public Mono goodCheck(Mono tokenMono) {
  return tokenMono
      // Transform Mono to Mono>.
      // If Mono is empty, flatMap will not be triggered,
      // then we will get a empty Mono>
      .flatMap(token -> Mono.just(Optional.of(token)))
      // If Mono> is empty, provide an empty Optional,
      // then we will get a non-empty Mono> anyway
      .defaultIfEmpty(Optional.empty())
      // Since Mono> is not empty, flatMap will always be triggered.
      .flatMap(tokenOptional -> {
        if (!tokenOptional.isPresent()) {
          // business logic
          return Mono.empty();
        }
        Token token = tokenOptional.get();
        if (token.isExpired) {
          // business logic
          return Mono.empty();
        }
        // business logic
        return Mono.empty();
      });
}

除了defaultIfEmpty之外,Reactor還提供了switchIfEmptyrepeatWhenEmpty來處理empty Mono/Flux

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74186.html

相關文章

  • SpringCloud升級之路2020.0.x版-41. SpringCloudGateway 基本

    摘要:添加相關依賴之后,會有這個。接著,根據的源碼分析,會繼續鏈路,到達下一個,即。在中,我們會計算出路由并發送請求到符合條件的。這個是的,會讀取配置并生成路由。本系列代碼地址:https://github.com/JoJoTec/spring-cloud-parent我們繼續分析上一節提到的 WebHandler。加入 Spring Cloud Sleuth 以及 Prometheus 相關依賴...

    不知名網友 評論0 收藏0
  • SpringCloud升級之路2020.0.x版-41. SpringCloudGateway 基本

    摘要:升級之路版基本流程講解抽象類本系列代碼地址我們繼續分析上一節提到的。添加相關依賴之后,會有這個。路由權重相關配置功能相關實現類,這個我們這里不關心。這個是的,會讀取配置并生成路由。 本系列代碼地址:??https://github.com/JoJoTec/spring-cloud-parent??我們繼續分析上一節提到的 ...

    番茄西紅柿 評論0 收藏2637
  • spring cloud gateway 源碼解析(1)整體流程

    摘要:公司要做自己的網關,于是先把的過了一遍,然后把源碼在看了一遍,這樣公司的需求就搞定了。包括動態路由,多緯度限流,記錄請求參數及返回參數也可修改。至此,流程就走完了。 公司要做自己的網關,于是先把github的issue過了一遍,然后把gateway源碼在看了一遍,這樣公司的需求就搞定了。包括動態路由,多緯度限流,記錄請求參數及返回參數(也可修改)。先從請求進入網關說起吧: 請求先進...

    miqt 評論0 收藏0
  • Spring Security: Webflux 默認配置

    摘要:默認配置所謂默認配置就是對不做任何配置讓它的自動配置起作用目的是對的默認行為有一個初步的直觀的了解第一步使用的創建項目項目創建完成會自動生成一個應用入口類第二步創建一個控制器啟動會在控制臺輸出中看到一個水機生成的格式的密碼最后打開即可顯示 默認配置 所謂默認配置, 就是對Spring Security不做任何配置. 讓它的自動配置起作用. 目的是對Spring Security 的默認...

    luoyibu 評論0 收藏0
  • springboot(六)——springboot與webflux結合初探

    摘要:的這幾天看了看的請求處理流程,因為之前一直用的和,一開始對的處理流程有點懵逼,找不到入口,后來跟了代碼,在網上找了點資料,發現的入口在的方法該方法的作用就是把接收到的或者最終需要返回的,包裝轉換為和。 spring-cloud-gateway 的ReactorHttpHandlerAdapter 這幾天看了看spring-cloud-gateway的請求處理流程,因為之前一直用的spr...

    hersion 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<