5

学生と登録済みのクラスの詳細を返す Web サービスがあります。

{
  "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 コントローラー ロジックは次のとおりです。

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

私はリアクティブプログラミングが初めてです。Flux & Mono を使用して目的の出力を得る正しい方法は何ですか?

4

2 に答える 2