如何结合Mono和Flux作为参数来创建新的Mono?

如何结合Mono和Flux作为参数来创建新的Mono?,mono,flux,project-reactor,Mono,Flux,Project Reactor,我的REST控制器方法应该返回Mono,Mono必须由两个并行请求构建到另一个web服务,并处理它们的响应,其中一个请求返回Mono,另一个请求返回flow 如何将Mono和Flux的响应结合起来并进行处理 型号: 控制器: 显然,控制器是错误的,因为: 1 Mono.zip接受2个或更多的Mono,其中我有Mono和Flux-如何组合它们? 2也不确定是否:students.forEachstudent->classModel.addStudentIdstudent.getId;对吗 有什么建

我的REST控制器方法应该返回Mono,Mono必须由两个并行请求构建到另一个web服务,并处理它们的响应,其中一个请求返回Mono,另一个请求返回flow

如何将Mono和Flux的响应结合起来并进行处理

型号:

控制器:

显然,控制器是错误的,因为: 1 Mono.zip接受2个或更多的Mono,其中我有Mono和Flux-如何组合它们? 2也不确定是否:students.forEachstudent->classModel.addStudentIdstudent.getId;对吗

有什么建议吗

您可以将方法更改为返回Mono 您可以在Flux上使用collectList,它将返回Mono,然后在addStudents中将学生对象转换为id

public Mono<ClassModel> addRandomClassFull() {
    return Mono.zip(
        reactiveNetClient.addRandomTeacher(),
        reactiveNetClient.addRandomStudents(10).collectList(),
        (teacher, students) -> {
             ClassModel classModel = new ClassModel();
             classModel.setRoomNr("24B");
             classModel.setClassName(faker.educator().course());
             classModel.setTeacherId(teacher.getId());
             classModel.addStudents(students);
        return classModel;
    }).flatMap(classRepository::save);
}
public Mono<ClassModel> addRandomClassFull() {
    return Mono.zip(
        //request teacher microservice and return Mono - single teacher
        reactiveNetClient.addRandomTeacher(),
        //request students microservice and return Flux - list of students
        reactiveNetClient.addRandomStudents(10),
        (teacher, students) -> {
            ClassModel classModel = new ClassModel();
            classModel.setRoomNr("24B");
            classModel.setClassName(faker.educator().course());
            classModel.setTeacherId(teacher.getId());
            students.forEach(student -> classModel.addStudentId(student.getId());
            return classModel;
        }).flatMap(classRepository::save);
}
public Mono<ClassModel> addRandomClassFull() {
    return Mono.zip(
        reactiveNetClient.addRandomTeacher(),
        reactiveNetClient.addRandomStudents(10).collectList(),
        (teacher, students) -> {
             ClassModel classModel = new ClassModel();
             classModel.setRoomNr("24B");
             classModel.setClassName(faker.educator().course());
             classModel.setTeacherId(teacher.getId());
             classModel.addStudents(students);
        return classModel;
    }).flatMap(classRepository::save);
}