当前位置: 首页 > 知识库问答 >
问题:

Spring webflux-路由

焦宏硕
2023-03-14

我使用的是Spring boot 2.3.3。松弛并使用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}并且list作为itemId出现。

这有什么问题吗?

共有1个答案

何哲
2023-03-14

andRoute的Spring留档

返回一个组合的路由函数,如果此路由不匹配并且应用了给定的请求谓词,则该函数将路由到给定的处理程序函数。

这里的关键词是合成的。这意味着您可以声明多个路由,所有这些路由必须一起匹配才能触发该路由。

您正在寻找的可能只是使用普通的路由生成器函数。

以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()

网络流量路由器功能

 类似资料:
  • 我希望为每个请求生成唯一的traceId,并将其传递给所有服务。在SpringMVC中,使用MDC上下文并将traceId放在头文件中相当容易,但在反应式堆栈中,由于ThreadLocal,它根本不起作用。 一般来说,我希望使用单个traceId记录我拥有的每个服务上的每个请求和响应,该traceId可以识别整个系统中的特定操作。 我试图根据文章创建自定义过滤器:https://azizulhaq

  • 我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef

  • 我正在使用reactive mongodb开发简单的spring webflux演示应用程序,我想按姓名读取员工的所有数据,但不包括姓名字段“joe”、“Sara”、“joe”、“Sara”,我有如下代码: //仓库接口 //服务类

  • 在什么情况下Spring webflow会进行订阅?我在任何地方都读到必须有订阅,否则不会发生任何更改。在我使用Spring Webflow的短暂时间里,我从未在控制器或服务中见过。 我的疑问还在于,在使用flatMap时,。。。等订阅在什么时候进行? 我所读的并不能真正解决我的疑虑。 我知道这是一个异步问题,但每个flatMap都同时运行?。。。所以有时候我注意到一些数据是空的。

  • 我的理解是单声道 我说得对吗? 如果没有,单声道之间的区别是什么

  • 问题内容: 我正在使用spring-webflux WebClient (内部版本20170502.221452-172)访问Web应用程序,该Web应用程序生成Entry对象流(application / stream + json),如下所示: 尽管Entry对象的反序列化对于使用标准通用类型(包括Java时间(JSR-310)数据类型,如java.time.Instant)的POJO都可以正

  • 我正在使用spring-webflux WebClient(build 20170502.221452-172)访问一个Web应用程序,该应用程序生成一个条目对象流(application/stream+JSON),如下所示: 虽然条目对象的反序列化对于使用标准通用类型(包括Java.time.instant等Java time(JSR-310)数据类型)的POJO很好,但我想知道,为了将任何自定

  • 我正在使用SpringWebSockets,我想从存储库返回一个项目列表 我怎么能在WebSocket会话中发送此列表 这是如何将项目列表发送到websocket的处理程序方法