spring-webflux-路由

djmepvbi  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(367)

我使用的是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的形式出现。
有什么问题吗?

hgtggwj0

hgtggwj01#

spring文档 andRoute 返回一个组合路由函数,如果此路由不匹配并且应用了给定的请求 predicate ,则该函数将路由到给定的处理程序函数。
这里的关键词是合成的。这意味着您可以声明多个路由,这些路由必须一起匹配才能触发路由。
你要找的可能只是用平原 route 生成器函数。
以spring文档为例:

RouterFunction<ServerResponse> route = route()
    .GET("/person/{id}", accept(APPLICATION_JSON), handler::getPerson) 
    .GET("/person", accept(APPLICATION_JSON), handler::listPeople) 
    .POST("/person", handler::createPerson) 
    .add(otherRoute) 
    .build();

或者你可以用 path 生成器函数是另一个选项。

RouterFunction<ServerResponse> route = route()
        .path("/api/person", builder -> builder
            .POST( ...)
            .GET( ... )
            .GET( ... )
        ).build())
    .build()

webflux路由器功能

相关问题