Spring替换router为coRouter后接口返回404,求正确配置方法
协程版Spring WebFlux路由配置导致404的解决方法
问题背景
原本使用router构建的Spring WebFlux路由可以正常运行:
@Configuration class RouteConfiguration { @Bean fun apiRouter(handler: UserHandler): RouterFunction<ServerResponse> { return router { "/api".nest { GET("/users") { ok().bodyValue(handler.getAllUsers()) } GET("/users/{id}") { val user: User? = handler.getUserById(it.pathVariable("id").toInt()) if (user != null) { ok().bodyValue(user) } else { ok().build() } } POST("/users") { ok().bodyValue(handler.createUser(it.bodyToMono(User::class.java).block())) } } } } }
改为使用协程版coRouter后,所有接口返回404 NOT FOUND,且IDEA无法识别这些接口:
@Configuration class RouteConfiguration { @Bean fun apiRouter(handler: UserHandler): RouterFunction<ServerResponse> { return coRouter { "/api".nest { GET("/users") { ok().bodyAndAwait(handler.getAllUsers()) } GET("/users/{id}") { val user: User? = handler.getUserById(it.pathVariable("id").toInt()) if (user != null) { ok().bodyValueAndAwait(user) } else { ok().buildAndAwait() } } POST("/users") { ok().bodyValueAndAwait(handler.createUser(it.bodyToMono(User::class.java).awaitSingle())) } } } } }
解决步骤
确认协程依赖正确性
确保项目已引入Spring WebFlux的协程支持依赖,Gradle示例:implementation("org.springframework.boot:spring-boot-starter-webflux")Spring Boot 3+版本已默认集成协程支持,需保证Kotlin版本不低于1.8。
修正路由Bean的返回类型
coRouter构建的是CoRouterFunction<ServerResponse>,虽然它继承自RouterFunction,但显式声明返回类型能避免Spring上下文识别问题:@Bean fun apiRouter(handler: UserHandler): CoRouterFunction<ServerResponse> { return coRouter { // 路由配置逻辑 } }检查协程相关导入
确保导入正确的coRouter扩展方法,正确导入路径为:import org.springframework.web.reactive.function.server.coRouter避免IDEA自动导入错误的包导致路由无法注册。
优化请求处理的协程调用
使用Spring WebFlux提供的协程扩展简化代码,同时保证调用合规:- POST请求中,替换
bodyToMono().awaitSingle()为更简洁的awaitBody():POST("/users") { val user = it.awaitBody<User>() ok().bodyValueAndAwait(handler.createUser(user)) } - 确保
getAllUsers()、getUserById()、createUser()等方法如果是协程调用,需标记为suspend函数。
- POST请求中,替换
验证配置类的扫描范围
确认@Configuration注解的配置类处于Spring Boot的组件扫描路径下(主类所在包或其子包),否则路由Bean无法被加载。
内容的提问来源于stack exchange,提问作者Max Valeev
相关产品推荐
相关产品推荐

