Добрый вечер. Я изучаю реактивное программирование и столкнулся со следующей проблемой:
Я запускаю два параллельных запроса к базе данных и хочу объединить результаты и вернуть их
@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
}
Вместо этого я получаю пустой ответ. По-видимому, это связано с моно-zip, но как еще можно объединить результаты, сохраняя параллелизм запросов
Мои объекты:
@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;
}
Как я могу разрешить эту ситуацию?