从两个 Mono 对象中获取属性并使用 Reactor Java 将它们设置为 属性 到第三个对象

Grab Attributes from two Mono Objects and set them as a property to a third object using Reactor Java

我有两个 Api,return 两个不同的 Mono 对象

Mono<User> user1 = api.service1(...);
Mono<UserV2> user2 = api.service2(...);

我想从这些对象中获取 属性 并将它们设置为另一个对象,例如 SuperUser

SuperUser superUser = new SuperUser();

我想做这样的事情

superUser.setProp1(user1.getProp1());
superUser.setProp2(user2.getProp1());

完成后,我想向 superUser 对象发送一些方法。

压缩两个单声道并从元组创建超级用户

Mono.zip(user1, user2).flatMap(data->{
    // get those values as below
    data.getT1();
    data.getT2();

    // set it to superUser
    return <your_response_object>;
});

像这样使用Mono#zipWith

Mono<SuperUser> superUserMono = user1.zipWith(user2)
    .map(userTuple -> {
       superUser.setProp1(userTuple.getT1().getProp1());
       superUser.setProp2(userTuple.getT2().getProp1());
       
       return superUser;
    })

这是一种更简洁的方法:)

SuperUser superUser = new SuperUser();

return Mono.zip(user1, user2).flatMap(data -> {
            String prop1 = data.getT1().getProp1();
            String prop2 = data.getT2().getProp1();
            if(prop1 != null)) {
                    superUser.setProp1(prop1);
            }
            if(prop2 != null) {
                superUser.setProp2(prop2);
            }
            return superUser;
        });