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

Java WebFlux应用中如何在Swagger展示动态注册路由?

解决Spring WebFlux中动态注册Controller的Swagger文档生成问题

在Spring WebFlux响应式应用中,无法直接复用Spring MVC里AbstractOpenApiResource.addRestControllers的静态方法,需要改用WebFlux对应的AbstractOpenApiWebFluxResource实例来完成动态控制器的文档注册。

具体实现代码

@Bean
public OpenAPI api(AbstractOpenApiWebFluxResource openApiWebFluxResource, ApplicationContext applicationContext) {
    OpenAPI openAPI = new OpenAPI()
            .addServersItem(new Server().url("/").description("默认服务器地址"))
            .info(new Info()
                    .title("DEMO 应用")
                    .description("演示应用")
                    .contact(new Contact()
                            .name("Philip G. Nahmias")
                            .email("nahmias22@gmail.com")));

    // 收集所有带@RequestMapping注解的Controller Bean(排除ErrorController)
    List<Class<?>> controllers = new ArrayList<>();
    applicationContext.getBeansWithAnnotation(RequestMapping.class).forEach((beanName, bean) -> {
        if (!beanName.endsWith("ErrorController")) {
            controllers.add(bean.getClass());
        }
    });

    // 调用WebFlux专属的addRestControllers方法注册控制器
    openApiWebFluxResource.addRestControllers(controllers.toArray(new Class[0]));

    return openAPI;
}

关键说明

  1. 依赖确保:项目中必须引入springdoc-openapi-webflux-ui依赖,版本需与你的Spring Boot版本兼容。
  2. 注解解析:只要动态注册的Controller类上带有@Operation、@ApiResponses这类Swagger注解,在调用addRestControllers后,Spring Doc会自动解析这些注解并生成对应的API文档。
  3. RouterFunction场景:如果是通过RouterFunction动态注册的端点,还需额外通过@RouterOperation注解标记RouterBean,或者自定义OpenApiCustomiser手动添加路径和操作定义。

内容的提问来源于stack exchange,提问作者Philip Nahmias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 22:16:15