整合Swagger

本文介绍了如何在Spring Boot项目中整合Swagger,实现接口文档的自动化生成与管理。通过添加依赖、配置Swagger类以及使用注解,开发者可以方便地创建、调试和分组接口文档。此外,还讲解了如何根据环境条件开关Swagger,确保生产环境的安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

整合Swagger

在现在的web开发中,前后端分离的开发模式大行其道,前端负责页面渲染,并发送请求到后端服务器请求数据,后端负责数据访问和处理,然后返回数据给前端

在前后端开发的模式中,接口的定义在协同开发中就非常重要,前端开发人员需要清晰地知道后端接口的用途,需要的参数和返回的数据,因此在开发中需要一份接口文档。Swagger是一款流行的Api框架,他可以定义Api接口的参数和返回值,并且支持同步更新和在线调试,解决了这个问题

基本使用

使用Swagger,需要导入Swagger的starter依赖,本文以Swagger3为例,Swagger2的用法和Swagger3会有少许不同

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-boot-starter</artifactId>
    <version>3.0.0</version>
</dependency>

配置Swagger配置类,将@EnableOpenApi注解添加在配置类或者启动类上

在容器中添加一个ApiInfo组件和Docket组件,ApiInfo组件用于描述项目的内容,作者以及License等信息,Docket组件用于设置接口文档需要扫描的接口

@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    public Docket createRestApi(ApiInfo apiInfo) {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo)
                .select()
                // 扫描接口,支持按包扫描,按注解扫描,全部扫描,全部不扫描
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
            	// 过滤的路径,支持按路径匹配,按正则表达式匹配,全部匹配,全部不匹配
                .paths(PathSelectors.any())
                .build();
    }

    @Bean
    public ApiInfo apiInfo() {
        Contact contact = new Contact("葱酱", "https://blog.youkuaiyun.com/blackball1998", "425017255@qq.com");
        return new ApiInfoBuilder()
                .title("我的项目")
                .description("我的项目介绍")
                .version("1.0")
                .termsOfServiceUrl("https://blog.youkuaiyun.com/blackball1998")
                .contact(contact)
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }

}

在接口类中添加@Api注解,设置接口类的作用,在接口上添加@ApiOperation注解,设置接口的作用

@Api(tags = "测试相关类")
@RestController
public class MyController {

    @ApiOperation(value = "测试接口", notes = "备注:这是一个测试接口")
    @GetMapping("/test")
    public String test(@RequestParam("name") String name) {
        return "success";
    }
}

设置完成后,启动项目,访问项目下的**/swagger-ui/index.html**地址,可以得到Swagger自动生成的文档页面,页面中有项目的描述信息,包括在配置类中设置的个人信息

在这里插入图片描述

扫描到的接口类也会出现在页面中,点开可以查看接口的请求方式,参数和返回值等信息

在这里插入图片描述

点击接口文档中的Try it out按键,还可以发送请求进行调试

在这里插入图片描述

在这里插入图片描述

添加参数和返回值说明

如果接口的参数或者返回值是用实体类表示的,我们还可以在参数类和返回类上添加参数和返回值的信息,比如我们的接口使用一个TestReqVO对象来接收,然后用一个TestResVO对象来返回

在VO类上添加@ApiModel注解,设置参数和返回的说明,然后在类的属性上添加@ApiModelProperty注解,设置每一个参数属性和返回值属性的说明

@Data
@ApiModel("测试接口参数")
public class TestReqVO {

    @ApiModelProperty("名字")
    String name;
    @ApiModelProperty("编号")
    String code;
}
@Data
@ApiModel("测试接口返回")
public class TestResVO {

    @ApiModelProperty("状态")
    String state;
    @ApiModelProperty("住址")
    String address;
    @ApiModelProperty("邮箱")
    String email;
}

只要在被Swagger扫码到的接口使用了这个VO作为参数或者返回值,Swagger就会将VO的信息添加在文档中

@Api(tags = "测试相关类")
@RestController
public class MyController {

    @GetMapping("/test")
    @ApiOperation(value = "测试接口", notes = "备注:这是一个测试接口")
    public TestResVO test(TestReqVO vo) {
        return new TestResVO();
    }
}

在这里插入图片描述

在这里插入图片描述

接口文档分组

在开发中,往往后台由多个人来开发,每个人开发自己的模块。Swagger支持文档分组的功能,每个人将自己的接口放在自己的组中,分别编写各自的接口说明文档

使用文档分组,只需要在Swagger配置类中添加多个Docket组件,每个组件设置不同的Bean名称,然后在不同的Docket中扫描不同的接口,这样就可以以每个Docket为一组分组

@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    public Docket docketA(ApiInfo apiInfo) {
        return new Docket(DocumentationType.OAS_30)
                .groupName("groupA")
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.blackball.groupA.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    @Bean
    public Docket docketB(ApiInfo apiInfo) {
        return new Docket(DocumentationType.OAS_30)
                .groupName("groupB")
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.blackball.groupB.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    @Bean
    public Docket docketC(ApiInfo apiInfo) {
        return new Docket(DocumentationType.OAS_30)
                .groupName("groupC")
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.blackball.groupC.controller"))
                .paths(PathSelectors.any())
                .build();
    }

    @Bean
    public ApiInfo apiInfo() {
        Contact contact = new Contact("葱酱", "https://blog.youkuaiyun.com/blackball1998", "425017255@qq.com");
        return new ApiInfoBuilder()
                .title("我的项目")
                .description("我的项目介绍")
                .version("1.0")
                .termsOfServiceUrl("https://blog.youkuaiyun.com/blackball1998")
                .contact(contact)
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }

}

打开Swagger页面,可以看到文档右上角有一个分组下拉框,可以按组显示不同的接口

在这里插入图片描述

根据环境开启关闭文档

一般情况下,接口文档只需要在开发阶段开放给开发人员阅读,而线上环境需要关闭文档,我们可以在IOC容器中获取Environment组件,用于判断当前的项目运行环境,然后使用Docket类的enable方法来自动开启关闭Swagger

@Configuration
@EnableOpenApi
public class SwaggerConfig {

    @Bean
    public Docket docket(ApiInfo apiInfo, Environment environment) {
        Profiles profiles = Profiles.of("dev", "test");
        boolean isEnable = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.OAS_30)
                .enable(isEnable)
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    @Bean
    public ApiInfo apiInfo() {
        Contact contact = new Contact("葱酱", "https://blog.youkuaiyun.com/blackball1998", "425017255@qq.com");
        return new ApiInfoBuilder()
                .title("我的项目")
                .description("我的项目介绍")
                .version("1.0")
                .termsOfServiceUrl("https://blog.youkuaiyun.com/blackball1998")
                .contact(contact)
                .license("Apache 2.0")
                .licenseUrl("http://www.apache.org/licenses/LICENSE-2.0")
                .build();
    }

}

设置项目环境为线上环境

spring:
  profiles:
    active: pro

这时候打开Swagger文档,发现由于环境条件过滤,Swagger文档已经关闭

在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何在Spring Boot项目中集成Swagger来生成API文档。根据用户提供的引用内容,我需要整理出一个清晰的步骤指南,同时确保遵循系统级指令,比如正确使用LaTeX格式和生成相关问题。 首先,我需要回顾用户提供的引用内容。引用[1]介绍了Spring BootSwagger的基本概念,以及整合的必要性。引用[3]提到了准备工作,比如JDK版本、IDE、构建工具和所需依赖。引用[5]提到了依赖版本的问题,特别是Spring BootSwagger版本的兼容性。引用[2]和[4]则涉及配置类中的注解以及如何在生产环境禁用Swagger。 接下来,我需要组织这些信息,按照步骤说明整合过程。第一步应该是创建Spring Boot项目,然后添加Swagger依赖。这里需要注意版本兼容性,比如引用[5]提到的使用2.9.2版本的springfox-swagger2和springfox-swagger-ui。然后,配置Swagger,创建配置类,添加必要的注解如@Configuration、@EnableSwagger2,可能还有@EnableSwaggerBootstrapUI(引用[2])。接着,配置API文档的基本信息,如标题、描述、版本等,这通常在Docket bean中设置。 还需要考虑生产环境的安全措施,如引用[4]提到的使用@Profile限制环境,或者整合权限管理。这部分可能需要简要提及,但用户的问题主要集中在配置方法,所以重点在配置步骤。 同时,我需要确保所有行内数学表达式正确使用$...$格式,但这里可能涉及较少数学内容,不过如果有版本号或其他代码内的变量,可能需要处理。例如,Maven依赖中的版本号可能需要用行内代码块而非LaTeX,但根据示例,代码部分应该用代码块包裹,所以可能不需要LaTeX处理。 检查是否有需要单独成段的公式,但问题主要涉及配置步骤和代码,可能不需要独立公式。确保使用中文回答,结构清晰,分步骤说明,每个步骤有代码示例或配置示例。 最后,生成相关问题,根据用户提供的引用内容,可能涉及版本兼容性、生产环境配置、UI增强、权限管理整合等。 现在整理步骤: 1. 创建Spring Boot项目:使用IDE或Spring Initializr,确保JDK8+,Maven/Gradle。 2. 添加Swagger依赖:根据引用[5],添加springfox-swagger2和springfox-swagger-ui的2.9.2版本。 3. 创建Swagger配置类:使用@Configuration和@EnableSwagger2注解,可能包括@EnableSwaggerBootstrapUI(引用[2])。 4. 配置Docket Bean:设置API信息,扫描的包路径等。 5. 访问Swagger UI:运行项目后通过特定URL访问。 6. 生产环境配置:使用@Profile限制环境(引用[4])。 在回答中需要引用对应的引用来源,如配置类中的注解引用[2],环境配置引用[4],依赖版本引用[5]等。 现在检查是否有遗漏或错误,比如版本兼容性问题,确保代码示例正确,特别是配置类和依赖部分。确认所有引用正确标注,问题部分涵盖用户可能关心的其他方面,如优化、安全、版本问题等。</think>### Spring Boot 整合 Swagger 配置方法及教程 #### **1. 创建 Spring Boot 项目** - 使用 **Spring Initializr** 或 IDE(如 IntelliJ IDEA)创建项目,选择 **Maven/Gradle** 作为构建工具。 - 确保 JDK 版本为 **8 及以上**,并添加 Spring Web 依赖[^3]。 #### **2. 添加 Swagger 依赖** 在 `pom.xml` 中添加以下依赖(注意版本兼容性[^5]): ```xml <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> ``` #### **3. 创建 Swagger 配置类** 新建配置类 `SwaggerConfig.java`,添加注解并配置 API 信息[^2][^4]: ```java @Configuration @EnableSwagger2 @EnableSwaggerBootstrapUI // 可选:增强UI界面 @Profile({"dev", "test"}) // 仅在开发/测试环境启用 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.example.controller")) // 扫描的包路径 .paths(PathSelectors.any()) .build(); } private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("API 文档") .description("接口说明") .version("1.0") .build(); } } ``` #### **4. 配置生产环境禁用 Swagger** 在 `application.properties` 中设置环境为 `prod`[^4]: ```properties spring.profiles.active=prod ``` #### **5. 访问 Swagger UI** 启动项目后,通过以下 URL 访问: - 默认 UI:`http://localhost:8080/swagger-ui.html` - 增强 UI(需添加 `@EnableSwaggerBootstrapUI`):`http://localhost:8080/doc.html` --- ### **关键配置说明** | 配置项 | 说明 | |-------------------------|--------------------------------------------------------------------| | `@EnableSwagger2` | 启用 Swagger 核心功能 | | `RequestHandlerSelectors` | 指定扫描的 Controller 包路径 | | `@Profile({"dev","test"})` | 限制 Swagger 仅在开发/测试环境生效 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值