本 Skill 提供从 Swagger 2 (Springfox) 迁移到 OpenAPI 3.0 (SpringDoc) 的完整指南,包括:
Swagger 2OpenAPI 3.0说明@Api``@Tag类/接口标注@ApiOperation``@Operation方法标注@ApiParam``@Parameter参数标注@ApiModel``@Schema模型类标注@ApiModelProperty``@Schema模型属性标注@ApiResponse``@ApiResponse响应标注(保留)@ApiResponses``@ApiResponses多响应标注(保留)@ApiImplicitParam``@Parameter隐式参数@ApiImplicitParams``@Parameters多隐式参数
@Api → @Tag
java
// Before (Swagger 2)
@Api(tags = "用户管理")
public class UserController {}
// After (OpenAPI 3.0)
@Tag(name = "用户管理")
public class UserController {}
@ApiOperation → @Operation
java
// Before
@ApiOperation(value = "获取用户信息", notes = "根据ID获取用户详情")
public User getUser(@ApiParam("用户ID") Long id) {}
// After
@Operation(summary = "获取用户信息", description = "根据ID获取用户详情")
public User getUser(@Parameter(description = "用户ID") Long id) {}
Response 处理(复杂替换)
java
// Before
@ApiOperation(value = "查询用户", response = User.class)
public ResponseEntity<User> query() {}
// After
@Operation(
summary = "查询用户",
responses = {
@ApiResponse(
responseCode = "200",
content = @Content(schema = @Schema(implementation = User.class))
)
}
)
public ResponseEntity<User> query() {}
@ApiModel → @Schema
java
// Before
@ApiModel(value = "用户对象", description = "用户信息")
public class UserDTO {}
// After
@Schema(description = "用户对象")
public class UserDTO {}
@ApiModelProperty → @Schema
java
// Before
@ApiModelProperty(value = "用户名", required = true, example = "张三")
private String username;
// After
@Schema(description = "用户名", requiredMode = Schema.RequiredMode.REQUIRED, example = "张三")
private String username;
java
// 旧包 (Swagger 2)
import io.swagger.annotations.*;
// 新包 (OpenAPI 3.0)
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.media.*;
import io.swagger.v3.oas.annotations.responses.*;
import io.swagger.v3.oas.annotations.parameters.*;
旧包 (Swagger 2)新包 (OpenAPI 3.0)io.swagger.annotations.Api``io.swagger.v3.oas.annotations.tags.Tag``io.swagger.annotations.ApiOperation``io.swagger.v3.oas.annotations.Operation``io.swagger.annotations.ApiParam``io.swagger.v3.oas.annotations.Parameter``io.swagger.annotations.ApiModel``io.swagger.v3.oas.annotations.media.Schema``io.swagger.annotations.ApiModelProperty``io.swagger.v3.oas.annotations.media.Schema``io.swagger.annotations.ApiResponse``io.swagger.v3.oas.annotations.responses.ApiResponse``io.swagger.annotations.ApiResponses``io.swagger.v3.oas.annotations.responses.ApiResponses
旧包 (javax)新包 (jakarta)javax.annotation.Resource``jakarta.annotation.Resource``javax.annotation.PostConstruct``jakarta.annotation.PostConstruct``javax.persistence.*``jakarta.persistence.*``javax.validation.*``jakarta.validation.*``javax.servlet.*``jakarta.servlet.*
本 skill 提供自动化脚本帮助快速完成迁移:
bash
# 1. 执行完整迁移(注解 + 包名)
python scripts/migrate_swagger_to_openapi.py --project-path /path/to/your/project
# 2. 仅迁移注解
python scripts/migrate_annotations.py --project-path /path/to/your/project
# 3. 仅迁移包名
python scripts/migrate_imports.py --project-path /path/to/your/project
对于复杂的迁移场景,建议分步进行:
A: tags → name,多标签使用多个 @Tag 注解
java
// Before
@Api(tags = {"用户管理", "账号管理"})
// After
@Tag(name = "用户管理")
@Tag(name = "账号管理")
A: value → summary, notes → description
java
// Before
@ApiOperation(value = "获取用户", notes = "详细说明...")
// After
@Operation(summary = "获取用户", description = "详细说明...")
A: 需要使用 @ApiResponse + @Content + @Schema 组合
java
// Before
@ApiOperation(value = "查询", response = User.class)
// After
@Operation(
summary = "查询",
responses = {
@ApiResponse(
responseCode = "200",
content = @Content(schema = @Schema(implementation = User.class))
)
}
)
A: 检查以下配置:
A: Spring Boot 3.x 已迁移到 Jakarta EE,需要:
javax.* 替换为 jakarta.*迁移要点:
建议按文件逐个检查,特别注意复杂的 @ApiResponse 场景。