我的Spring存储库实现了一个返回User的kotlinx.coroutines.flow.Flow的函数,但是即使我的数据库中有某些记录,该流也总是空的。
我正在使用带有Kotlin协程支持的Spring Boot 2.2.0-SNAPSHOT。我在存储库中创建了两种方法,一种用于创建用户,另一种用于列出所有用户。创建用户的工作正常,我可以在数据库中看到该用户。列出现有用户的第二个列表始终返回一个空列表,即使我的数据库中有一些记录也是如此。
我在Spring应用程序旁边使用一个PostGres 10.1 Docker实例。
完整项目可在github上找到:https://github.com/kizux/demo-spring-webflux-kotlin
这是我的存储库的方法实现:
src / main / kotlin / fr / kizux / kotlindemocoroutines / repository / UserRepository.kt
fun findAll(): Flow<User> = dbClient.select().from(TABLE_USER_NAME).asType<User>().fetch().flow()
此处理程序返回: src / main / kotlin / fr / kizux / kotlindemocoroutines / handler / UserHandler.kt
suspend fun getAll(req: ServerRequest): ServerResponse = ServerResponse.ok().bodyAndAwait(userRepo.findAll())
并路由至: src / main / kotlin / fr / kizux / kotlindemocoroutines / configuration / RouterConfig.kt
@Bean
fun userRoutes(userHandler: UserHandler) = coRouter {
"/user".nest {
GET("", userHandler::getAll)
POST("", userHandler::create)
}
}
我还尝试在应用程序启动时添加日志: src / main / kotlin / fr / kizux / kotlindemocoroutines / KotlinDemoCoroutinesApplication.kt
@EventListener(value = [ApplicationReadyEvent::class])
fun init() {
runBlocking {
userRepo.save(User(email="j@hn.doe", signInDate=LocalDateTime.now()))
userRepo.findAll().onEach { user -> println("Here is $user") }
}
}
目前我唯一得到的回报是一个空的json对象:
http://localhost:8080/user-HTTP 200 = {}
我想我应该获得更多类似的东西:
http://localhost:8080/user-HTTP 200 = {“ id”:1,“ email”:“ j@hn.doe”,“ signInDate”:“无论”}
答案 0 :(得分:0)
我改变了依赖性
implementation("org.springframework.data:spring-data-r2dbc:BUILD-SNAPSHOT")
到
implementation("org.springframework.data:spring-data-r2dbc:1.0.0.M2")
现在就可以使用