调用未从 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);
我是 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);