java - Flux 返回空对象
问题描述
我今天开始使用 Flux,因为它非常强大。现在我已经设置了一个完整的简单 Spring boot 2 项目来处理它,但返回的对象是空的。
我开始了一个非常简单的带有一些依赖项的 Spring Boot 项目:
- 反应式 Web(嵌入式 Netty + Spring WebFlux)
- 反应式 MongoDB (Spring Data MongoDB)
- Thymeleaf 模板引擎
- Lombok(简化 POJO 的编写)
并添加了一些代码:
控制器:
@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
课堂上创建的数量相同。当我更改创建的对象数量时,它会在端点上显示该数量。
我不知道我做错了什么,我尝试调试返回的通量对象。但我什么也做不了。
我希望有人能发现我的错误!
解决方案
您得到的是空对象,因为数据未保存并且出现问题。
您正在使用@Data
lombok 注释,这就像在类上具有隐式 @Getter、@Setter、@ToString、@EqualsAndHashCode 和 @RequiredArgsConstructor 注释(除非存在任何显式编写的构造函数,否则不会生成构造函数)。但有时如果没有在 IDE 中正确配置它就不起作用,因此请尝试使用手动 getter 和 setter 来设置属性。
如果手动 getter/setter 工作,那么请尝试在下面对 lombok 进行故障排除。
确保您的 IDE 知道 lombok。
IntelliJ:添加了 Lombok,但在 Intellij IDEA 中无法识别 getter 和 setter
Eclipse:Lombok 没有生成 getter 和 setter
如果问题仍然存在,请关注此类似线程的评论之一
推荐阅读
- google-chrome-extension - 无法读取未定义的属性“查询”-在香草 Chrome 扩展中
- reactjs - 如何在使用 testRenderer 的测试中停止 React HTML 转义引号?
- c# - 在 API 过期之前更新/扩展 JWT
- c++ - 一组无 const 值的方法 find 不能用 const 值调用。const_cast 可以用来解决这个问题吗?
- python - 如何在python中完成50个动作(发送电子邮件)后告诉程序休眠60秒
- python - 有没有办法在带有循环的字典中自行生成相似的键名和值?
- java - 如何从 Java Springboot 执行复杂的 MongoDB 本机查询
- python - 抓取屏幕的特定部分并使其成为在 Python 中自我更新的图像
- python - 如何自动将照片上传到网站?
- git - Git:ftp不是命令