org.springframework.web.servlet.function.RouterFunctions 是 Spring Web MVC 提供的函数式路由核心类,用于替代传统注解式(如 @RestController)的路由定义方式。以下是关键特性与用法:
核心功能
-
路由构建
- 通过
route()方法链式组合RequestPredicate(请求条件)和HandlerFunction(处理逻辑)。 - 支持嵌套路由(
nest())和模块化组织代码。
- 通过
-
请求处理
HandlerFunction接收ServerRequest并返回ServerResponse,实现纯函数式处理。
-
适配与转换
- 可将
RouterFunction转换为HttpHandler或WebHandler,兼容不同运行时环境16。
- 可将
典型用法示例
定义路由规则并处理 GET 请求:
RouterFunction<ServerResponse> route = RouterFunctions.route()
.GET("/hello", request -> ServerResponse.ok().body("Hello World"))
.build();
支持组合谓词(如路径、HTTP 方法、Content-Type)。
与注解式对比
| 特性 | 注解式(@RestController) | 函数式(RouterFunction) |
|---|---|---|
| 编程模型 | 声明式,基于注解 | 函数式,显式组合逻辑28 |
| 灵活性 | 有限 | 支持动态路由和复杂谓词组合68 |
| 适用场景 | 传统 MVC | 响应式或需要细粒度控制的场景48 |
底层机制
请求由 DispatcherServlet 处理,通过 RouterFunctionMapping 匹配路由并调用对应的 HandlerFunction