Spring Reactor 響應式編程: 如何使用Mono?
Spring 響應式編程
近些日子在學習有關spring-boot 3 的 新feature ,才了解到除常用的阻塞制servlet外,spring 使用了響應式框架reactor支持的響應式web 編程 , 較之原來的編程方式 ,我個人更加喜歡這種類lamdba 的流式 api,接下來就將會逐章介紹。
什么是 Mono?
在 Spring Reactor 中,Mono 是一個關鍵的類,用于表示包含零個或一個元素的異步計算。它是響應式編程的基本構建塊之一,類似于 Java 8 中的 CompletableFuture,但提供了更豐富的功能和操作符。
創建和使用 Mono
創建 Mono
要創建一個 Mono 對象,可以使用 Mono 類中的靜態方法,例如 Mono.just() 或 Mono.empty()。下面是一些示例:
Mono<String> monoWithJust = Mono.just("Hello, world!");
使用操作符處理 Mono
Mono 提供了豐富的操作符來處理數據流。以下是一些常用的操作符及其示例:
map: 轉換 Mono 中的值。
Mono<String> mono = Mono.just("Hello") .map(s -> s + ", world!"); flatMap: 處理嵌套的 Mono。
Mono<String> mono = Mono.just("Hello") .flatMap(s -> Mono.just(s.toUpperCase())); filter: 過濾 Mono 中的值。
Mono<Integer> mono = Mono.just(5) .filter(num -> num > 0); defaultIfEmpty: 在 Mono 為空時提供默認值
Mono<String> mono = Mono.empty() .defaultIfEmpty("Default Value");
onErrorResume: 處理錯誤并返回備用值。
Mono<String> mono = Mono.error(new RuntimeException("Error occurred")) .onErrorResume(error -> Mono.just("Recovered from error")); 示例
以下是一個使用 Mono 的完整示例,演示了如何進行異步操作:
Mono<String> mono = Mono.just("Hello") .map(s -> s + ", world!") .flatMap(s -> Mono.just(s.toUpperCase())); mono.subscribe(System.out::println);

浙公網安備 33010602011771號