首页 > 解决方案 > Flux 返回空对象

问题描述

我今天开始使用 Flux,因为它非常强大。现在我已经设置了一个完整的简单 Spring boot 2 项目来处理它,但返回的对象是空的。

我开始了一个非常简单的带有一些依赖项的 Spring Boot 项目:

并添加了一些代码:

控制器:

@RestController
public class ChapterController {

    @Autowired
    private ChapterRepository repository;

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

存储库:

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

配置:(在嵌入的MongoDB中加载一些数据) @Configuration public class 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课堂上创建的数量相同。当我更改创建的对象数量时,它会在端点上显示该数量。

我不知道我做错了什么,我尝试调试返回的通量对象。但我什么也做不了。

我希望有人能发现我的错误!

标签: javaspringspring-bootspring-webflux

解决方案


您得到的是空对象,因为数据未保存并且出现问题。

您正在使用@Datalombok 注释,这就像在类上具有隐式 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor 注释(除非存在任何显式编写的构造函数,否则不会生成构造函数)。但有时如果没有在 IDE 中正确配置它就不起作用,因此请尝试使用手动 getter 和 setter 来设置属性。

如果手动 getter/setter 工作,那么请尝试在下面对 lombok 进行故障排除。

确保您的 IDE 知道 lombok。

IntelliJ:添加了 Lombok,但在 Intellij IDEA 中无法识别 getter 和 setter

Eclipse:Lombok 没有生成 getter 和 setter

如果问题仍然存在,请关注此类似线程的评论之一


推荐阅读