嵌套的webflux路由始终与顶部的路由一起使用

时间:2018-02-12 20:25:50

标签: java spring reactive-programming spring-webflux

每次我输入ex:/ api / person / 1等时,有人能在这个路由示例中告诉我这一切都转到/ api / person吗?无论我选择哪种方法,它总是与/ api / person一起使用。

@Bean
    public RouterFunction<ServerResponse> monoRouterFunction(PersonService personService) {

      return  RouterFunctions
                .nest(path("/api/person"),
                        route(method(GET), personService::findAllPeople)
                            .andRoute(GET("/{id}"), personService::findOnePerson)
                            .andRoute(POST("/add"), personService::addPerson)
                            .andRoute(PUT("/update"), personService::updatePerson)
                            .andRoute(DELETE("/delete/{id}"), personService::deletePerson));

}

3 个答案:

答案 0 :(得分:2)

与注释模型不同,WebFlux.fn对路由非常明确:排序和所有谓词都很重要。但好处是调试更容易,您可以在谓词中设置调试点,以了解请求被路由到处理程序的原因。

在这种情况下,此RouterFunction可以描述为:

如果路径以“/ api / person”

开头
  1. 并且该方法是GET - &gt;然后是personService :: findAllPeople
  2. ,方法是POST,路径匹配“/ api / person / {id}” - &gt;然后是personService :: findOnePerson
  3. 由于第一场比赛获胜,因此"GET /api/person/42"之类的请求将匹配1),因为它以"/api/person"开头并且是GET请求。

    如果您想更改,可以更改路线的顺序,或更改route(GET("/"), personService::findAllPeople)的谓词。

答案 1 :(得分:2)

下面的代码工作正常。我在本地亲自尝试过。正如@Brain所说,只需为findAllPeople()处理程序方法添加GET(“/")。

@Bean
public RouterFunction<ServerResponse> monoRouterFunction(PersonService personService) 
{

 return  RouterFunctions
            .nest(path("/api/person"),
                    route(method(GET("/")), personService::findAllPeople)
                        .andRoute(GET("/{id}"), personService::findOnePerson)
                        .andRoute(POST("/add"), personService::addPerson)
                        .andRoute(PUT("/update"), personService::updatePerson)
                        .andRoute(DELETE("/delete/{id}"), personService::deletePerson));

}

示例工作应用程序:https://github.com/karthikaiselvan/spring-reactive-mongo

答案 2 :(得分:1)

我们甚至可以删除静态导入,此外,如果我们有不同类型的媒体类型,我们可以像下面的代码一样使用requestPredicate:

show()

您可以在我的存储库中找到更多详细信息:https://github.com/minarashidi/webflux