Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论:

        Swgger 3.0  与Swagger 2.0  区别很大,Swagger3.0用了最新的注释实现更强大的功能,同时使得代码更优雅。

        就个人而言,如果新项目推荐使用Swgger 3.0,对于工具而言新的一定比旧的好;对接于旧项目原有Swagger 2.0版本不变就不要变,因为它作为辅助功能能达到你的需求就可以了(当然我一再声明这只代表我的个人看法,欢迎留言讨论)。

一、Maven配置方面差异

Swagger 2.0

 <!-- swagger -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.8.0</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>

Swagger 3.0

<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
    <version>2.3.0</version>
</dependency>

配置application.yml  或者application.properties

application.yml

spring:
    mvc:
        pathmatch:
            matching-strategy: ant_path_matcher

application.properties

spring.mvc.pathmatch.matching-strategy= ant_path_matcher

二、配置类区分

Swagger 2.0

@Configuration
@EnableSwagger2
public class SwaggerConfig {

    @Bean
    public Docket createRestApi(){
    	// 添加请求参数,我们这里把token作为请求头部参数传入后端
		ParameterBuilder parameterBuilder = new ParameterBuilder();  
//		List<Parameter> parameters = new ArrayList<Parameter>();
//		parameterBuilder
////				.name("token").description("令牌")
//			.modelRef(new ModelRef("string")).parameterType("header").required(false).build();
//		parameters.add(parameterBuilder.build());
//		return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()
//				.apis(RequestHandlerSelectors.any()).paths(PathSelectors.any())
//				.build().globalOperationParameters(parameters);
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo(){
//    	return new ApiInfoBuilder()
//    			.title("Kitty API Doc")
//    			.description("This is a restful api document of Kitty.")
//    			.version("1.0")
//    			.build();
        return new ApiInfoBuilder().build();
    }

}

Swagger 3.0

@Configuration
public class OpenAPIConfig {
    /**
     * 这个方法可以不配置会自动去扫描,但配置了更好,因为扫描有了目标性会更快
     * 这个方法是创建分组
     * @return
     */
    @Bean
    public GroupedOpenApi publicApi() {
        String[] paths = {"/**"};
        String[] packages = {"com.example.test.controller"};//扫描的路径
        return GroupedOpenApi.builder()
                .group("public")
                .pathsToMatch(paths)
                .packagesToScan(packages)
                .build();
    }
    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("接口文档标题")
                        .description("SpringBoot3 集成 Swagger3接口文档")
                        .version("v1"))
                .externalDocs(new ExternalDocumentation()
                        .description("项目API文档")
                        .url("/"));
    }
}

三、常注解差异

Swagger2.0 与 Swagger 3.0 的注释对比
注解位置Swagger 2.0Swagger 3.0 
Controller 类@Api@Tag(name="接口名",description="接口描述")
Controller 方法@ApiOperation@Operation(summary =“接口方法描述”)
@ApilmplicitParams@Parameters
Controller 方法上 @Parameters 里@ApiImplicitParam@Parameter(description=“参数描述”)
Controller 方法的参数上@ApiParam@Parameter(description=“参数描述”)
@ApiIgnore@Parameter(hidden = true) 或 @Operation(hidden = true) 或 @Hidden
DTO类上@ApiModel@Schema
DTO属性上@ApiModelProperty

Swagger 2

        controller代码

        DTO

 

Swagger 3

        Controller代码

@RestController
@Tag(name = "TestController",description = "测试接口")
@RequestMapping(value = "/swaggertest")
public class TestController {

    @Operation(summary = "测试接口",description = "测试接口")
    @GetMapping(value = "/noHiddenApi")
    public String noHiddenApi(@Parameter(name = "id",description = "这个ID代表.......") Integer id){
        return "noHiddenApi";
    }
}

        DTO代码

@Schema(description = "用户实体类")
public class SysUser {
    @Schema(description = "用户id")
    private Integer id;
    @Schema(description = "用户名")
    private String username;
    @Schema(description = "密码")
    private String password;

}

后记

花了近一个小时的时间写这个文章,如果有问题请留言指正,确对您有帮助请点赞收藏,谢谢观看。

### Spring Boot 集成 Swagger 3.0 实现 API 文档自动生成 为了在 Spring Boot 中集成 Swagger 3.0 并实现自动化的 API 文档生成功能,可以按照以下方式操作: #### 添加依赖项 首先,在项目的 `pom.xml` 文件中引入必要的 Maven 依赖项来支持 OpenAPI Swagger UI 功能。 ```xml <dependency> <groupId>org.springdoc</groupId> <artifactId>springdoc-openapi-ui</artifactId> <version>1.7.0</version> </dependency> ``` 此依赖会提供对 OpenAPI 的支持以及内置的 Swagger UI 工具[^3]。 #### 启动配置类 无需额外创建启动器类,只需确保主应用程序类上已标注有标准的 Spring Boot 注解即可。例如: ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 上述代码片段展示了基本的应用程序入口设置[^4]。 #### 自定义文档信息(可选) 如果希望进一步定制生成的 API 文档中的元数据,则可以通过 Java Bean 来完成这些细节设定。下面是一个例子展示如何通过 `OpenApiCustomiser` 或者直接注入属性到环境变量里来自定义描述字段等内容。 ```java import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class OpenApiConfig { @Bean public OpenAPI customOpenAPI() { return new OpenAPI() .info(new Info().title("Sample Application API") .description("A sample application demonstrating integration with Swagger/OpenAPI.") .version("v0.0.1")); } @Bean public GroupedOpenApi userGroupedOpenApi(){ return GroupedOpenApi.builder() .group("users") // Define group name. .pathsToMatch("/users/**") // Specify path patterns to include in this group&#39;s documentation. .build(); } } ``` 以上代码设置了开放平台接口的信息部分,并且还演示了分组功能以便更好地管理大型系统的多个模块或服务端点集合[^5]。 访问路径 `/swagger-ui/index.html#/`, 就可以看到完整的交互式 API 列表页面[^6]. 注意:版本号应始终匹配新稳定版发布情况;实际开发过程中可能需要调整具体数值以适应不同场景需求变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值