调用未从 Spring Reactive Controller 传播到服务方法

Call not propagating to the service method from Spring Reactive Controller

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

主要服务 class 正在为数据调用以下服务 classes

StudentService - return Mono<Student>

StaffService - return Mono<Staff>

这里我有一个包装器 class StudentWithMentor 来存储这些服务的结果 classes.

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
}

注意:我在调试时从底层服务中获取结果。但是调用在处理之前 returning。

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

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

查看下面的代码:

Mono<StudentWithMentor> studentWithMentorMono = studentService.getStudentById(id)
            .zipWhen(student -> staffService.getStaffByGrade(student.getGrade()), StudentWithMentor::new);