springboot整合swagger

特别说明:本次项目整合基于idea进行的,如果使用Eclipse可能操作会略有不同,不过总的来说不影响。

springboot整合之如何选择版本及项目搭建

springboot整合之版本号统一管理 

springboot整合mybatis-plus+durid数据库连接池

springboot整合swagger

springboot整合mybatis代码快速生成

springboot整合之统一结果返回

springboot整合之统一异常处理

springboot整合之Validated参数校验

springboot整合之logback日志配置

springboot整合pagehelper分页

springboot整合本地缓存

springboot整合redis + redisson

springboot整合elasticsearch

springboot整合rabbitMq

springboot整合canal实现缓存一致性

springboot整合springSecurity(前后端不分离版本)

在开始之前先说一下自己的理解。我觉得既然要使用,首先就要知道为什么要用?该不该用?如果说我们的项目就俩人开发的一个小项目,又没有前后端分离,而且有比较急着上线,那我觉得这种真是没有必要用swagger。这里只是举个例子,就是告诉大家没有必要为了swagger而swagger。

我认为swagger更适合前后端分离情况,或者需要协同开发给别人提供接口测试的时候使用。在这种情况下能够提高协同的效率。如果一项技术的引进不能提高开发效率,或者对项目本身没有什么提升,我觉得引入的意义就不大。而且引入很多没用的文件对内存也是影响,有时候甚至会影响我们程序的性能。

如果确定适合,那就整合进来。但是千万注意一点。这个只能是测试环境使用,千万不要放到正式环境。这个一定要注意!!!关于怎么设置正式环境不可用会在本次整合中给出示范。

我在项目开发中用过两种不同风格的swagger UI,这里会都展示一下,具体用那种大家可以根据需要来选择就好了。

一、pom文件引入

因为跟之前的几次的整合相比这次对版本进行了统一的依赖管理,所以直接贴上了所有的整合pom,如果有小伙伴是按照之前一步一步来的,这里直接替换pom就好了。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--spring-boot 依赖版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>

    <!--当前项目坐标-->
    <groupId>com.example</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-demo</name>
    <description>springboot-demo</description>

    <!--版本依赖管理-->
    <properties>
        <java.version>8</java.version>
        <druid.version>1.2.15</druid.version>
        <mybatis-plus.version>3.4.2</mybatis-plus.version>
        <swagger.version>2.9.2</swagger.version>
    </properties>


    
    <dependencies>
        <!--spring-boot-starter 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--spring-boot-starter-web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--热启动依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--lombok 依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--spring-boot-starter-test 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mysql 链接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--druid数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.version}</version>
        </dependency>

        <!--swagger.ui-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.9.6</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

二、创建swagger配置类

首先把位置说明一下

package com.example.springbootdemo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
@Profile("dev")
public class SwaggerConfig {
	/**
	 * 创建API应用 apiInfo() 增加API相关信息
	 * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
	 * 本例采用指定扫描的包路径来定义指定要建立API的目录。
	 */
	@Bean
	public Docket createRestApi() {

		return new Docket(DocumentationType.SWAGGER_2)
				//接口说明信息
				.apiInfo(apiInfo())
				// 选择那些路径和api会生成document
				.pathMapping("/").select()
				// 对所有api进行监控
				.apis(RequestHandlerSelectors.any())
				.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)).build();
	}


	/**
	 * 创建该API的基本信息(这些基本信息会展现在文档页面中)
	 *
	 * @return
	 */
	private ApiInfo apiInfo() {
		return new ApiInfoBuilder()
				.title("测试接口文档")
				.contact(new Contact("William","https://www.baidu.com","William940115@163.com"))
				.termsOfServiceUrl("https://www.baidu.com")
				.description("测试接口文档")
				.version("1.0")
				.build();
	}

}

说明:

@Configuration   将当前配置类交给spring管理
@EnableSwagger2  开启swagger注解,此注解也可以添加到spring boot启动类
@Profile("dev")  开启只有dev环境生效,此外swagger也提供了基于环境的可见性设置,这里就不作详细介绍了,如果感兴趣的可以自己研究一下,也很简单。

三、创建测试类

 因为测试,我们先临时写一个测试类,主要就是测试我们的swagger是否整合成功。

package com.example.springbootdemo.controller;

import com.example.springbootdemo.entity.User;
import com.example.springbootdemo.service.UserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @description: TestController <br>
 * @date: 2022/12/17 0017 上午 10:06 <br>
 * @author: William <br>
 * @version: 1.0 <br>
 */
@Api(tags = "测试接口")
@RestController
@RequestMapping("test")
public class TestController {

    @Autowired
    private UserService userService;


    @ApiOperation("根据用户ID获取用户信息接口")
    @GetMapping("user/{id}")
    public String getUserById(@PathVariable("id") Integer id){
        //参数校验
        if(id == null || id<=0){
            return "参数非法";
        }
        User user = userService.getById(id);
        return user.toString();
    }

}

四、启动测试

首先给大家看一下我比较喜欢的一种,输入http://localhost:8080/doc.html进行访问

 各人觉得很不错的一个UI页面,看起来很舒服。而且支持离线导出,相当给力。个人觉得比swagger自带的UI要好用一点。

然后就是另一种:输入http://localhost:8080/swagger-ui.html

 这种是我们比较常见的。我以前也经常用,后来发现了第一种这种就没用了。

 OK,到这里整合就完成了。下面就是常用的一些注解了。

五、swagger常用注解 

从官方给的解释,各位学习使用的时候建议直接从这里看,而且都给了例子,很简单。

NameDescription
@ApiMarks a class as a Swagger resource.
@ApiImplicitParamRepresents a single parameter in an API Operation.
@ApiImplicitParamsA wrapper to allow a list of multiple ApiImplicitParam objects.
@ApiModelProvides additional information about Swagger models.
@ApiModelPropertyAdds and manipulates data of a model property.
@ApiOperationDescribes an operation or typically a HTTP method against a specific path.
@ApiParamAdds additional meta-data for operation parameters.
@ApiResponseDescribes a possible response of an operation.
@ApiResponsesA wrapper to allow a list of multiple ApiResponse objects.
@AuthorizationDeclares an authorization scheme to be used on a resource or an operation.
@AuthorizationScopeDescribes an OAuth2 authorization scope.


好了,到这里我们swagger就整合好了。另外说一下,为了展示两种效果所以我在pom中引入了两个swagger-ui的jar包,后面我会删掉一个,只保留一个。大家可以根据自己需要来。我觉得最好只保留一个就好了。

六、最终pom

我保留的是我比较喜欢的一个,修改以后的pom文件如下:如果跟我一样的可以直接复制到自己的项目。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!--spring-boot 依赖版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
    </parent>

    <!--当前项目坐标-->
    <groupId>com.example</groupId>
    <artifactId>springboot-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-demo</name>
    <description>springboot-demo</description>

    <!--版本依赖管理-->
    <properties>
        <java.version>8</java.version>
        <druid.version>1.2.15</druid.version>
        <mybatis-plus.version>3.4.2</mybatis-plus.version>
        <swagger.version>2.9.2</swagger.version>
        <swagger-ui.version>1.9.6</swagger-ui.version>
    </properties>



    <dependencies>
        <!--spring-boot-starter 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <!--spring-boot-starter-web 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--热启动依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <!--lombok 依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <!--spring-boot-starter-test 依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--mysql 链接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--druid数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!--swagger-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>

        <!--swagger.ui-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>${swagger-ui.version}</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

如果文章对你有所帮助的话,可以点赞关注一下~

<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、付费专栏及课程。

余额充值