【发布时间】:2020-06-26 08:49:46
【问题描述】:
晚上好。 我在学习响应式编程,遇到了以下问题。
我正在对数据库运行两个并行查询,并希望合并结果并将它们返回
@GetMapping
public Mono<User> get(@RequestParam("id") String id, @RequestParam("cId") String cId) {
Mono<User> userMono = Mono.fromCallable(() -> userServ.get(id))
.flatMap(userMono1 -> userMono1)
.subscribeOn(Schedulers.boundedElastic());
Mono<Comment> ger = Mono.fromCallable(() -> commentServ.ger(cId))
.flatMap(commentMono -> commentMono)
.subscribeOn(Schedulers.boundedElastic());
return Mono.zip(userMono, ger)
.map(pair -> {
User t1 = pair.getT1();
t1.setComment(pair.getT2());
return t1;
});
但是重点是注释可能是空的,然后我期望返回这样一个结构的json
{
"id": "5e6cbf395214a42f51b57121",
"name": "Bob",
"surname": null,
"comment": null
}
相反,我得到一个空的响应。显然这是由于单声道压缩,但我还能如何组合结果,同时保持查询并行性
我的实体:
@Document
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Comment {
@Id
String id;
String userId;
String comment;
}
@Document
@AllArgsConstructor
@NoArgsConstructor
@Data
public class User {
@Id
private String id;
private String name;
private String surname;
private Comment comment;
}
我该如何解决这种情况?
【问题讨论】:
标签: java spring multithreading spring-webflux project-reactor