簡體   English   中英

使用 spring webflux 反應式存儲庫會導致嵌套的 Mono Object

[英]Working with spring webflux reactive repositories results in nested Mono Object

public interface ApplicationDataRepository extends ReactiveCrudRepository<ApplicationData, Long> {
}

使用 spring webflux 響應式存儲庫會導致嵌套的 Mono Object。

applicationDataRepository.findById(100L).map(o -> {
    o.setName("changed name");
    return applicationDataRepository.save(o);
})

以上三行代碼生成Mono<Mono<ApplicationData>> 如何將其轉換為Mono<ApplicationData>或避免在這種情況下結束?

這不是 WebFlux 的問題。 它是通過 Project Reactor 編程 model 及其 API 實現的反應式流。 請先熟悉一下: https://projectreactor.io/

您需要的是MonoflatMap運算符:

/**
 * Transform the item emitted by this {@link Mono} asynchronously, returning the
 * value emitted by another {@link Mono} (possibly changing the value type).
 *
 * <p>
 * <img class="marble" src="doc-files/marbles/flatMapForMono.svg" alt="">
 *
 * @param transformer the function to dynamically bind a new {@link Mono}
 * @param <R> the result type bound
 *
 * @return a new {@link Mono} with an asynchronously mapped value.
 */
public final <R> Mono<R> flatMap(Function<? super T, ? extends Mono<? extends R>>
        transformer) {

https://projectreactor.io/docs/core/release/reference/#which.values

WebFlux 實際上只是一個 Web: https://docs.spring.io/spring-framework/docs/current/webflux/html/

ReactiveCrudRepository是 Spring 數據項目的一部分: https://docs.spring.io/spring-data/commons/#repository.io/spring-data/commons/#repository.io/

我的意思是,將所有內容都稱為“webflux”是錯誤的,因為該主題比 Web 更廣泛。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM