Flux возвращает пустые объекты - PullRequest
0 голосов
/ 04 ноября 2018

Я начинаю с Flux сегодня, потому что он довольно мощный. Теперь я настроил целый простой проект Spring boot 2 для работы с ним, но возвращенные объекты пусты.

Я запустил очень простой проект Spring Boot с некоторыми зависимостями:

  • Реактивная сеть (встроенный Netty + Spring WebFlux)
  • Реактивная MongoDB (Spring Data MongoDB)
  • Шаблонный движок Thymeleaf
  • Ломбок (для упрощения написания POJO)

И добавил код:

контроллер:

@RestController
public class ChapterController {

    @Autowired
    private ChapterRepository repository;

    @GetMapping("/chapters")
    public Flux<Chapter> listing() {
        return repository.findAll();
    }
}

Repository:

public interface ChapterRepository extends ReactiveCrudRepository<Chapter, String> {}

Конфигурация: (для загрузки некоторых данных во встроенный Mongodb) @Configuration открытый класс LoadDatabase {

    @Bean
    CommandLineRunner init(ChapterRepository repository){
        return args -> {
            Flux.just(
                new Chapter("The life of Batman"),
                new Chapter("Batmans most glorious' code"),
                new Chapter("The hero we needed but didn't deserve, Batman."))
                    .flatMap(repository::save)
                    .subscribe(System.out::println);
        };
    }
}

Класс данных:

@Data
@Document
public class Chapter {

    @Id
    private String id;
    private String name;

    public Chapter(String name) {
        this.name = name;
    }
}

Хорошо, теперь, когда я запускаю приложение и получаю доступ к конечной точке: http://localhost:8080/chapters, возвращается:

[
   {},
   {},
   {}
]

Показывает то же количество объектов, которое я создал в классе LoadDatabase. Когда я изменяю количество созданных объектов, оно показывает это количество в конечной точке.

Я не знаю, что я сделал неправильно, я попытался отладить возвращенный объект потока. Но я ничего не могу из этого сделать.

Надеюсь, кто-то может заметить мою ошибку!

1 Ответ

0 голосов
/ 04 ноября 2018

Вы получаете пустые объекты, потому что данные не сохранены и что-то пошло не так.

Вы используете @Data аннотацию lombok, которая похожа на наличие неявных аннотаций @Getter, @Setter, @ToString, @EqualsAndHashCode и @RequiredArgsConstructor в классе (за исключением того, что конструктор не будет создан, если существует какой-либо явно написанный конструктор). но иногда это не работает, если не настроен в IDE правильно, поэтому попробуйте один раз с ручными методами получения и установки для свойств.

Если работают ручные геттеры / сеттеры, попробуйте ниже устранить неполадки для lombok.

Убедитесь, что ваша IDE знает о lombok.

IntelliJ: Lombok добавлен, но методы получения и установки не распознаются в Intellij IDEA

Затмение: Ломбок не генерирует геттер и сеттер

Если проблема все еще существует, следуйте одному из комментариев этой ветки здесь

...