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

springdoc-openapi-ui的Swagger UI无法识别openapi-generator生成的@Controller类接口

问题解决步骤

1. 解决生成控制器默认带@Controller注解无法被扫描的问题

你不需要额外自定义控制器实现SvcApi接口,直接调整openapi-generator-maven-plugin的生成配置即可,让生成器自动给控制器添加@RestController注解:
在你的pom.xml中找到openapi-generator-maven-plugin的配置,添加useRestController=true配置项:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>你的插件版本</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>你的openapi yaml文件路径</inputSpec>
                <generatorName>spring</generatorName>
                <configOptions>
                    <!-- 核心配置:生成的控制器自动添加@RestController注解 -->
                    <useRestController>true</useRestController>
                    <interfaceOnly>false</interfaceOnly>
                    <!-- 确保basePath和你yaml中的配置一致 -->
                    <basePath>/books/api/v1</basePath>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>

重新执行mvn clean generate-sources后,生成的控制器会自动携带@RestController注解,SpringDoc会自动扫描到接口定义,不会再出现"No operations defined in spec!"的提示。

2. 解决Swagger UI "Try it out"请求不带路径前缀的问题

两种方案可选,推荐第一种:

方案1:配置自定义OpenAPI Bean注入全局服务路径

新增Spring配置类,手动注入OpenAPI实例,指定服务前缀,这样Swagger UI会自动拼接前缀生成请求路径:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.servers.Server;
import java.util.List;

@Configuration
public class SpringDocConfig {
    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                // 配置和你yaml中一致的服务前缀
                .servers(List.of(new Server().url("/books/api/v1")));
    }
}

方案2:直接指定Swagger UI读取原始OpenAPI YAML

把你的openapi-definition.yaml放到项目src/main/resources/static目录下,然后在application.yml中添加如下配置:

springdoc:
  swagger-ui:
    # 直接读取你原始的yaml文件,接口定义和路径完全和你定义的一致
    url: /openapi-definition.yaml

3. 注意事项

  • 删掉你自定义的AddonController,避免同时存在两个SvcApi实现类,导致出现带前缀和不带前缀的两份重复接口
  • 如果还是扫描不到生成的控制器,可以在application.yml中添加扫描包配置:
springdoc:
  packages-to-scan: 你的生成控制器所在的完整包名,比如com.xxx.generated.controller

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 10:06:05