Java 从Mono收集int值<;实体>;使用WebFlux的对象
从Mono对象收集值的正确方法是什么? 我有一个名为Student的实体,它同时具有用户id值和学生id值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> 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,只要有人订阅此
,就会用该信息创建一个主题并返回该主题。订阅部分通常发生在SpringWebFlux中,因此您只需要从控制器方法返回Mono
Mono
- 没有具有该id的学生,因此第一个存储库将返回
。在这种情况下,将不会调用Mono.empty()
操作符,并有效地返回一个空发布者;未创建flatMap
。根据应用程序的预期行为,您可以查看StudentSubject
或defaultIfEmpty
操作符来处理这种情况switchIfEmpty
- 有一个错误。您可以让错误流抛出管道并由WebFlux处理,也可以直接使用
操作符处理它onError*
log()
操作符(作为常规操作符),您将在日志中看到确切发生的情况
Mono<StudentSubject> studentSubject = studentRepository.findStudentByUserid(id)
.flatMap(student -> {
StudentSubject subject = new StudentSubject();
subject.setStudentId(student.getStudentId());
return studentsubjectRepository.save(subject);
});