0

我是spring webflux的初学者。我们目前正在将我们的应用程序迁移到 Spring Webflux。不,我遇到了一个问题。以下是我的场景。

主要服务类为数据调用以下服务类

StudentService- 返回Mono<Student>

StaffService- 返回Mono<Staff>

这里我有一个包装类 StudentWithMentor 来存储这些服务类的结果。

public class StudentWithMentor {

    private Student student;
    private Staff mentor;
}

现在在控制器中,我正在调用上述 2 个服务并以下列方式将其映射到“StudentWithMentor”中

Mono<StudentWithMentor> studentWithMentorMono = Mono.just(new StudentWithMentor());
        return studentWithMentorMono.map(s->{
            studentService.getStudentById(id)
            .doOnSuccess(s::setStudent)
            .doOnSuccess(st->staffService.getStaffByGrade(st.getGrade()));
            return s;
        });

但是当我调用这个端点时,我在邮递员中得到以下结果

{
    "student": null,
    "mentor": null
}

注意:我在调试时从底层服务获得结果。但是调用在它处理之前就返回了。

我怎样才能以完全非阻塞的方式实现这一点。感谢任何帮助。

4

1 回答 1

1

最简单的方法是使用zipWith运算符将​​结果合并到StudentWithMentor对象中。

请看下面的代码:

Mono<StudentWithMentor> studentWithMentorMono = studentService.getStudentById(id)
            .zipWhen(student -> staffService.getStaffByGrade(student.getGrade()), StudentWithMentor::new);
于 2020-07-07T19:23:39.687 回答