gpt4 book ai didi

project-reactor - 如何正确地将 Flux 包裹在 Mono 对象中

转载 作者:行者123 更新时间:2023-12-02 03:00:54 25 4
gpt4 key购买 nike

我有一个返回学生和注册类(class)详细信息的网络服务。

{
"name": "student-name",
"classes": [
{
"className": "reactor-101",
"day": "Tuesday"
},
{
"className": "reactor-102",
"day": "Friday"
}
]
}

该类的 DTO 如下:
public class Student {
private String name;
private Flux<StudentClass> classes;
@Data
@AllArgsConstructor
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
public static class StudentClass {
private String className;
private String day;
}
}

获取学生的主要 REST Controller 逻辑如下:
Flux<StudentClass> studentClassFlux = studentClassRepository.getStudentClass(studentName);

return Mono.just(new Student(studentName, studentClassFlux));

问题是,在进行 REST 调用后,我得到以下输出:
{
"name": "student-name",
"classes": {
"prefetch": 32,
"scanAvailable": true
}
}

我可以通过阻止通量请求以完成所需的输出,然后将输出转换为列表来实现所需的输出。
List<StudentClass> studentClassList = studentClassRepository.getStudentClass(studentName)..toStream().collect(Collectors.toList());
return Mono.just(new Student(studentName, studentClassList)); // Change the Student#classes from flux to list

我是响应式(Reactive)编程的新手。
在这里使用 Flux & Mono 获得所需输出的正确方法是什么?

最佳答案

react 类型在彼此包装时并不意味着要序列化。
在这种特殊情况下,您可能想要您的 Student包含 List<StudentClass> 的对象.你可以这样实现:

public Mono<Student> findStudent(String studentName) {

return studentClassRepository
.getStudentClass(studentName)
.collectList()
.map(studentClasses -> new Student(studentName, studentClasses));
}

关于project-reactor - 如何正确地将 Flux 包裹在 Mono 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46227337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com