繁体   English   中英

从 Mono 收集 int 值<Entity>使用 WebFlux 的对象

[英]Collecting int value from the Mono<Entity> object using WebFlux

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

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

我想使用 studentId ( student.getStudentId() ) 在不同的表中保存一个新值

StudentSubject ss;
ss.setStudentId(student.getStudentId());
studentsubjectRepository.save(ss);

最好的方法是什么?

你的问题缺乏一些细节,所以我将从这一点上假设一些事情。

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

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

使用flatMap运算符允许您以反应方式链接调用。

这里可能会发生几件事:

  • 有一个具有该 id 的学生,只要有订阅此Mono的内容,就会使用该信息创建一个主题并返回。 订阅部分通常发生在 Spring WebFlux 中,因此您只需要从控制器方法中返回Mono
  • 没有具有该 ID 的学生,因此第一个存储库将返回Mono.empty() 在这种情况下,您的flatMap运算符将不会被调用,并且有效地返回了一个空的发布者; 没有创建StudentSubject 根据您的应用程序的预期行为,您可以查看defaultIfEmptyswitchIfEmpty运算符来处理这种情况
  • 有错误。 您可以让错误流抛出管道并由 WebFlux 处理,或者您可以直接使用onError*运算符处理它。

如果您是 Reactor 的新手,您可以随时在链中的任何位置添加log()运算符(作为常规运算符),您将在日志中看到准确发生的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM