java—使用SpringWebFluxReact式存储库会产生嵌套的mono对象

pgccezyw  于 2021-07-15  发布在  Java
关注(0)|答案(1)|浏览(516)
public interface ApplicationDataRepository extends ReactiveCrudRepository<ApplicationData, Long> {
}

使用springwebfluxReact性存储库会产生嵌套的mono对象。

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

以上三行代码导致 Mono<Mono<ApplicationData>> . 我怎样才能把它变成 Mono<ApplicationData> 或者避免陷入这种境地?

abithluo

abithluo1#

这不重要。它是一个React流编程模型及其通过projectreactor实现的api。请先熟悉一下:https://projectreactor.io/
你需要的是一个 flatMap 操作员 Mono :

/**
 * 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实际上就是一个网络:https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#spring-webflux公司
这个 ReactiveCrudRepository 是spring数据项目的一部分:https://docs.spring.io/spring-data/commons/docs/2.4.6/reference/html/#repositories
我的意思是,把每件事都称为“网络流量”是错误的,因为这个主题比网络更广泛。

相关问题