使用webflux在一个单声道中设置另一个单声道

jvlzgdj9  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(283)

我在找出版商 Mono<ProductOrder> 来自mongo db
我有另一个出版商 Mono<CommandResponse> 我想把 ProductOrder 对象到 CommandResponse 因为它是那门课的一部分。就像
commandResponse.setProductOrder(po instance) CommandResponse 也会有不同的 Mono 或者 String or Int 除了 ProductOrder 示例
终于想回来了 Mono<ServerResponse> 其中包含了 CommandResponse 我不能设置 Mono<ProductOrder> 对象到 Mono<CommandResponse> 请帮忙。谢谢。
代码段

@Component
public class Handler {

    @Autowired
    private MongoService service;

    public Mono<ServerResponse> get(ServerRequest request) {
        Mono<ProductOrder> p = service.queryById();

> Here, in the return statement i want to return Mono<CommandResponse> 
> instead of Mono<ProductOrder> in the response body
> remember: CommandResponse has a reference to ProductOrder

        return 
            ServerResponse.ok()
                .contentType(MediaType.APPLICATION_JSON)
                .body(p, ProductOrder.class).map(null);
        );
    }
}
kadbb459

kadbb4591#

Mono<CommandResponse> commandMono = ... // I don't how it is set 
Mono<ProductOrder> productMono = service.queryById();
Mono.zip(commandMono, productMono)
  .map(tuple -> { 
    var command = tuple.getT1();
    var product = tuple.getT2();
    command.setProductOrder(product) // => .setProductOrder(po instance)
    return command;
  })
  .flatMap(command -> ServerResponse.ok()
    .contentType(MediaType.APPLICATION_JSON)
    .bodyValue(command)
  )

我还没有运行这段代码,所以我不确定它是否可以编译,但是有了它,您应该可以知道您的代码是如何工作的

相关问题