我使用的是springboot2.3.3.relase和webflux。使用下面的路由器配置。
@Bean
public RouterFunction<ServerResponse> itemRoute() {
return RouterFunctions.route(POST("/api/v1/item").and(accept(APPLICATION_JSON)), itemHandler::createItem)
.andRoute(GET("/api/v1/item/{itemId}").and(accept(APPLICATION_JSON)), itemHandler::getItemById)
.andRoute(GET("/api/v1/item/list").and(accept(APPLICATION_JSON)), itemHandler::getItems);
}
当我击中 /api/v1/item/1
--->它按预期工作。
但是,打 /api/v1/list
也转到 getItemById
而不是 getItems
. /api/v1/item/list
也被认为是 /api/v1/item/{itemId}
列表以itemid的形式出现。
有什么问题吗?
1条答案
按热度按时间hgtggwj01#
spring文档
andRoute
返回一个组合路由函数,如果此路由不匹配并且应用了给定的请求 predicate ,则该函数将路由到给定的处理程序函数。这里的关键词是合成的。这意味着您可以声明多个路由,这些路由必须一起匹配才能触发路由。
你要找的可能只是用平原
route
生成器函数。以spring文档为例:
或者你可以用
path
生成器函数是另一个选项。webflux路由器功能