You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WebFlux中如何提取路由的通用前缀

WebFlux中如何提取路由的通用前缀

太懂这种需求了!在Spring MVC里,给Controller类加个@RequestMapping("/api")就能轻松把所有接口的通用前缀抽出来,不用每个接口都重复写,换到WebFlux的函数式路由风格时,确实得换个思路,下面给你两种实用的解决办法:


方法一:函数式路由用path()嵌套统一加前缀

如果你是用RouterConfig这种函数式路由的写法,直接用RouterFunctions.route()的path()方法来嵌套路由就行,相当于把通用前缀"套"在所有相关路由外面:

@Configuration
public class RouterConfig {

    private final UserHandler userHandler;

    // 构造注入处理业务逻辑的Handler类
    public RouterConfig(UserHandler userHandler) {
        this.userHandler = userHandler;
    }

    @Bean
    public RouterFunction<ServerResponse> userRoutes() {
        // 统一指定/api作为前缀,内部的路由自动继承这个前缀
        return RouterFunctions.route()
                .path("/api", builder -> builder
                        .GET("/users", userHandler::getAllUsers)
                        .GET("/users/{id}", userHandler::getUserById)
                        .POST("/users", userHandler::createUser)
                )
                .build();
    }
}

这样定义后,实际的接口路径就会是/api/users、/api/users/{id},和MVC里类级前缀的效果完全一样,不用每个路由都手动拼接前缀。


方法二:注解式WebFlux控制器直接沿用类级@RequestMapping

要是你还是习惯用注解式的写法(比如@RestController),那更省心——WebFlux的注解式控制器和Spring MVC的用法在这一点上完全一致,直接给类加@RequestMapping指定通用前缀就行:

@RestController
@RequestMapping("/api") // 这个前缀在WebFlux注解控制器里同样生效
public class UserController {

    @GetMapping("/users")
    public Mono<List<User>> getAllUsers() {
        // 你的业务处理逻辑
    }

    @GetMapping("/users/{id}")
    public Mono<User> getUserById(@PathVariable String id) {
        // 你的业务处理逻辑
    }
}

这种方式完全不用改变你之前的开发习惯,上手零成本。


内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:19:38