【问题标题】:Spring Boot Webflux: RouterFunctions Add Query ParametersSpring Boot Webflux:RouterFunctions 添加查询参数
【发布时间】:2020-08-05 17:40:40
【问题描述】:

我试图弄清楚如何在使用 RouterFunctions 时向路由添加查询参数。这是我目前所拥有的:

  @Bean
public RouterFunction<ServerResponse> routes() {
    return
        RouterFunctions.route()
            .GET("/one/{one}", routeHandlerOne::handlerOne)
            .GET("/two", routeHandlerOne::handlerTwo)
        .build();
}

对于路由two,我想添加一个查询参数,例如/two?three。任何帮助都会非常有帮助,谢谢!

【问题讨论】:

    标签: spring spring-boot spring-webflux


    【解决方案1】:

    RequestPredicates 类上有一个queryParam() 方法可以使用。

    RouterFunctions.route()
       .GET("/one", RequestPredicates.queryParam("test", t -> true), new CustomHanlder())
       .build();
    

    queryParam() 有两种重载方法。一个取确切的值与 (javadoc) 进行比较。第二个(上例中的那个)接受一个谓词,如果谓词返回 true (javadoc),它将委托给处理函数。

    然后您可以通过处理函数中的ServerRequest 对象访问查询参数,即。

    serverRequest.queryParam("test")
    

    【讨论】:

    • 有没有办法让查询参数可选?
    • 从路由器中删除 RequestPredicates.queryParam ,无论查询参数是否存在,它都会进入该处理程序。然后在您的处理程序中,当您调用 serverRequest.queryParam() 时,您将返回一个 Optional。如果未发送参数,则可选项将为空。
    • 酷!感谢您的回复!
    • 我想在使用RouterFunctions时向路由添加多个(超过1个或n个)查询参数。它成功完成如下: RouterFunctions.route() .GET("/", RequestPredicates.queryParam("id", t -> true), g::h) .GET("/", RequestPredicates.queryParam( "名称", t -> true), g::h) .build();如果 id 或 name 被传递,api 会给出 200 的响应。我希望只有 id 和 name 都被传递时,api 应该给出 200 响应。如果传递了除 id 和 name 之外的任何额外字段,或者缺少任何字段(id 或 name)。
    • @PRAFULANAND 你能提出一个新问题吗?
    猜你喜欢
    • 1970-01-01
    • 2021-09-15
    • 2021-05-24
    • 2022-01-23
    • 2020-10-21
    • 1970-01-01
    • 2019-08-03
    • 2019-09-22
    • 2021-03-12
    相关资源
    最近更新 更多