如何在SpringWebFlux中将mono对象转换为其他mono对象

kq0g1dla  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(1499)

我有一节这样的课

  1. public class Person {
  2. private String name;
  3. private String age;
  4. private Boolean student;
  5. ...
  6. //
  7. getters and setters
  8. }
  1. public class PersonDto {
  2. private List<Person> persons
  3. private Person president
  4. //
  5. getters and setters
  6. }

并从外部api向webclient获取数据

  1. --- omitted ---
  2. final Mono<PersonDto> personDto = wrapperWebClient.getPersonDto(uriComponents, params, PersonDto.class);
  3. Mono<StudentDto> studentDto = convert(personDto);
  4. --- omitted ---

我想将数据转换成如下所示。

  1. public class Student {
  2. // no constructors
  3. private String name;
  4. private String age;
  5. private Boolean student;
  6. ...
  7. //
  8. getters and setters
  9. }
  1. public class StudentDto {
  2. private List<Student> students;
  3. private Student represent;
  4. ...
  5. //
  6. getters and setters
  7. }

这是我的尝试

  1. --- omitted ---
  2. private Mono<StudentDto> convert(Mono<PersonDto> personDto) {
  3. StudentDto studentDto = new StudentDto();
  4. personDto.map(
  5. persons -> {
  6. studentDto.setStudents(
  7. persons.getPersons()
  8. .stream().filter(person -> person.isStudent())
  9. .collect(toList())
  10. );
  11. studentDto.setRepresent(
  12. persons.getRepresent().isStudent()
  13. );
  14. }
  15. )
  16. return ???;
  17. }

我的方法似乎是同步的。

bqucvtff

bqucvtff1#

你用 flatMap . 这是基本的React器,在询问堆栈溢出之前,您应该通读入门React器。

  1. private Mono<StudentDto> convert(Mono<PersonDto> personDto) {
  2. return personDto.flatMap(personDto -> {
  3. final StudentDto studentDto = new StudentDto();
  4. studentDto.setStudents(
  5. persons.getPersons()
  6. .stream().filter(person -> person.isStudent())
  7. .collect(toList())
  8. );
  9. studentDto.setRepresent(
  10. persons.getRepresent().isStudent()
  11. );
  12. return Mono.just(studentDto);
  13. })
  14. }

相关问题