从两个 Mono 对象中获取属性并使用 Reactor Java 将它们设置为第三个对象的属性
Posted
技术标签:
【中文标题】从两个 Mono 对象中获取属性并使用 Reactor Java 将它们设置为第三个对象的属性【英文标题】:Grab Attributes from two Mono Objects and set them as a property to a third object using Reactor Java 【发布时间】:2022-01-24 05:07:30 【问题描述】:我有两个 Api,它们返回两个不同的 Mono 对象
Mono<User> user1 = api.service1(...);
Mono<UserV2> user2 = api.service2(...);
我想从这些对象中获取一个属性,然后将它们设置为另一个对象,比如 SuperUser
SuperUser superUser = new SuperUser();
我想做这样的事情
superUser.setProp1(user1.getProp1());
superUser.setProp2(user2.getProp1());
完成后,我想向超级用户对象发送一些方法。
【问题讨论】:
user1.map(usr -> usr.getProp1()).subscribe(System.out::println);我已经尝试过这样的事情,但是如何将其设置为对象? 【参考方案1】:压缩两个单声道并从元组创建超级用户
Mono.zip(user1, user2).flatMap(data->
// get those values as below
data.getT1();
data.getT2();
// set it to superUser
return <your_response_object>;
);
【讨论】:
谢谢你——我花了几个小时在这上面:'(【参考方案2】:这是一种更清洁的方法:)
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;
);
【讨论】:
【参考方案3】:像这样使用Mono#zipWith:
Mono<SuperUser> superUserMono = user1.zipWith(user2)
.map(userTuple ->
superUser.setProp1(userTuple.getT1().getProp1());
superUser.setProp2(userTuple.getT2().getProp1());
return superUser;
)
【讨论】:
以上是关于从两个 Mono 对象中获取属性并使用 Reactor Java 将它们设置为第三个对象的属性的主要内容,如果未能解决你的问题,请参考以下文章
useEffect 尝试在 React 中更新状态之前读取对象的属性
如何在 Spring Boot 中修改 Mono 对象的属性而不阻塞它