【问题标题】:Call not propagating to the service method from Spring Reactive Controller调用不从 Spring Reactive Controller 传播到服务方法
【发布时间】:2020-10-27 17:02:07
【问题描述】:

我是 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
}

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

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

【问题讨论】:

    标签: reactive-programming spring-webflux project-reactor spring-webclient spring-reactive


    【解决方案1】:

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

    请看下面的代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      相关资源
      最近更新 更多