【问题标题】:WebFlux How to Chain Queries In Functional Non Blocking WayWebFlux 如何以功能性非阻塞方式链接查询
【发布时间】:2019-11-27 00:00:00
【问题描述】:

我是函数范式的新手,想知道如何在创建新对象之前进行一些查询?

@Override
public Mono<Order> create(CreateOrderRequest specs) {

    //itemRepository.findAll(specs.getItemCodes()) //returns Flux<Item>


    final Order newOrder = new Order(items);
    return orderRepository.insert(newOrder)
            .switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "Failed to create order")));
}

如何以非阻塞方式链接注释代码?查询返回 Flux&lt;Item&gt; 而 Order 构造函数需要 List&lt;Item&gt;

【问题讨论】:

    标签: spring-boot reactive-programming spring-webflux project-reactor reactive


    【解决方案1】:

    您可以使用collectList() 方法,该方法会将您的Flux&lt;Item&gt; 更改为Mono&lt;List&lt;Item&gt;&gt;

    之后,您可以使用map() 方法将您的List&lt;Item&gt; 转换为Order 对象,并使用flatMap() 方法获取保存的结果。

    例如:

    return itemRepository
        .findAll(specs.getItemCodes())
        .collectList()
        .map(Order::new)
        .flatMap(orderRepository::insert)
        .switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.BAD_REQUEST, "Failed to create order")));
    

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2017-02-09
      • 2020-10-08
      相关资源
      最近更新 更多