每次我输入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));
}
答案 0 :(得分:2)
与注释模型不同,WebFlux.fn对路由非常明确:排序和所有谓词都很重要。但好处是调试更容易,您可以在谓词中设置调试点,以了解请求被路由到处理程序的原因。
在这种情况下,此RouterFunction
可以描述为:
如果路径以“/ api / person”
开头由于第一场比赛获胜,因此"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