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; }
关键说明
- 依赖确保:项目中必须引入
springdoc-openapi-webflux-ui依赖,版本需与你的Spring Boot版本兼容。 - 注解解析:只要动态注册的Controller类上带有
@Operation、@ApiResponses这类Swagger注解,在调用addRestControllers后,Spring Doc会自动解析这些注解并生成对应的API文档。 - RouterFunction场景:如果是通过
RouterFunction动态注册的端点,还需额外通过@RouterOperation注解标记RouterBean,或者自定义OpenApiCustomiser手动添加路径和操作定义。
内容的提问来源于stack exchange,提问作者Philip Nahmias
相关产品推荐
相关产品推荐

