Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Mono收集int值<;实体>;使用WebFlux的对象_Java_Repository_Spring Webflux - Fatal编程技术网

Java 从Mono收集int值<;实体>;使用WebFlux的对象

Java 从Mono收集int值<;实体>;使用WebFlux的对象,java,repository,spring-webflux,Java,Repository,Spring Webflux,从Mono对象收集值的正确方法是什么? 我有一个名为Student的实体,它同时具有用户id值和学生id值 Mono<Student> student = studentRepository.findStudentByUserid(id); 最好的方法是什么?你的问题缺少一些细节,因此我将从这一点上假设一些事情 假设您的应用程序正在使用以下代码: Mono<StudentSubject> studentSubject = studentRepository.findSt

从Mono对象收集值的正确方法是什么? 我有一个名为Student的实体,它同时具有用户id值和学生id值

Mono<Student> student = studentRepository.findStudentByUserid(id);

最好的方法是什么?

你的问题缺少一些细节,因此我将从这一点上假设一些事情

假设您的应用程序正在使用以下代码:

Mono<StudentSubject> studentSubject = studentRepository.findStudentByUserid(id)
    .flatMap(student -> {
        StudentSubject subject = new StudentSubject();
        subject.setStudentId(student.getStudentId());
        return studentsubjectRepository.save(subject);
    });
Mono studentSubject=studentRepository.findStudentByUserid(id)
.flatMap(学生->{
StudentSubject=新的StudentSubject();
subject.setStudentId(student.getStudentId());
返回studentsubjectRepository.save(主题);
});
使用
flatMap
操作符可以以反应式方式链接调用

这里可能会发生几件事:

  • 有一个学生具有该id,只要有人订阅此
    Mono
    ,就会用该信息创建一个主题并返回该主题。订阅部分通常发生在SpringWebFlux中,因此您只需要从控制器方法返回
    Mono
  • 没有具有该id的学生,因此第一个存储库将返回
    Mono.empty()
    。在这种情况下,将不会调用
    flatMap
    操作符,并有效地返回一个空发布者;未创建
    StudentSubject
    。根据应用程序的预期行为,您可以查看
    defaultIfEmpty
    switchIfEmpty
    操作符来处理这种情况
  • 有一个错误。您可以让错误流抛出管道并由WebFlux处理,也可以直接使用
    onError*
    操作符处理它
如果您是Reactor新手,您可以随时在链中的任何位置添加
log()
操作符(作为常规操作符),您将在日志中看到确切发生的情况

Mono<StudentSubject> studentSubject = studentRepository.findStudentByUserid(id)
    .flatMap(student -> {
        StudentSubject subject = new StudentSubject();
        subject.setStudentId(student.getStudentId());
        return studentsubjectRepository.save(subject);
    });