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

迁移至Jakarta后,如何用Maven生成兼容Swagger-UI的JSON?

解决Swagger Maven Plugin Jakarta版生成OpenAPI 3.0.1内容缺失问题

问题根源

旧的com.github.kongchen插件基于Swagger 2.0注解体系解析,而io.swagger.core.v3的Jakarta版完全适配OpenAPI 3.x规范——尽管部分注解名称和Swagger 2.0一致,但底层解析逻辑不兼容,直接复用旧注解会导致插件无法识别,最终生成的文档缺失关键内容。

分步修复方案

1. 统一依赖与插件版本

避免版本冲突,在pom.xml中确保Swagger核心依赖和插件版本一致:

<!-- OpenAPI 3.x Jakarta核心依赖 -->
<dependency>
    <groupId>io.swagger.core.v3</groupId>
    <artifactId>swagger-jaxrs2-jakarta</artifactId>
    <version>2.2.15</version> <!-- 与插件版本保持一致,选最新稳定版也可 -->
</dependency>

<!-- Maven插件配置 -->
<build>
    <plugins>
        <plugin>
            <groupId>io.swagger.core.v3</groupId>
            <artifactId>swagger-maven-plugin-jakarta</artifactId>
            <version>2.2.15</version>
            <executions>
                <execution>
                    <phase>compile</phase>
                    <goals>
                        <goal>resolve</goal>
                    </goals>
                    <configuration>
                        <outputFileName>openapi</outputFileName>
                        <outputPath>${project.build.directory}</outputPath>
                        <!-- 必须覆盖所有含API/模型注解的包,否则会漏扫 -->
                        <resourcePackages>
                            <package>com.yourcompany.api</package>
                            <package>com.yourcompany.model</package>
                        </resourcePackages>
                        <prettyPrint>true</prettyPrint>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2. 替换为OpenAPI 3.x注解

废弃旧的io.swagger.annotations包下的注解,全部改用io.swagger.v3.oas.annotations包的注解,重点调整以下内容:

  • 标签(Tags):用@Tag替代旧的@Api,直接标注在API类上:
    @Tag(name = "用户管理", description = "用户增删改查相关接口")
    @Path("/users")
    public class UserResource {
        // ...
    }
    
  • 响应模型与Content字段:旧@ApiOperation的response参数在3.x中失效,需用@Content+@Schema明确指定响应结构:
    旧Swagger 2.0写法:
    @ApiOperation(value = "获取用户详情", response = User.class)
    @ApiResponses(value = {
        @ApiResponse(code = 200, message = "请求成功")
    })
    
    新OpenAPI 3.x Jakarta写法:
    @Operation(summary = "获取用户详情")
    @ApiResponses(value = {
        @ApiResponse(responseCode = "200", description = "请求成功",
            content = @Content(mediaType = "application/json",
                schema = @Schema(implementation = User.class)))
    })
    

3. 清理缓存重新构建

执行命令清理旧构建产物,重新生成OpenAPI文档:

mvn clean compile

验证生成结果

查看target/openapi.json文件,确认以下内容:

  • tags数组包含定义的标签信息
  • 接口responses中对应状态码的content字段包含正确的媒体类型和Schema引用
  • components.schemas下生成了所有模型类的完整结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:56