mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-03 03:38:43 +08:00 
			
		
		
		
	接入 swagger + knife4j 组件,实现 API 接口文档
This commit is contained in:
		
							
								
								
									
										5
									
								
								http-client.env.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								http-client.env.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "local": {
 | 
				
			||||||
 | 
					    "baseUrl": "http://127.0.0.1:8080"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										67
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								pom.xml
									
									
									
									
									
								
							@@ -41,14 +41,19 @@
 | 
				
			|||||||
<!--        <jwt.version>0.9.1</jwt.version>-->
 | 
					<!--        <jwt.version>0.9.1</jwt.version>-->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Web 相关 -->
 | 
					        <!-- Web 相关 -->
 | 
				
			||||||
 | 
					        <knife4j.version>3.0.2</knife4j.version>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- DB 相关 -->
 | 
					        <!-- DB 相关 -->
 | 
				
			||||||
        <mysql-connector-java.version>5.1.46</mysql-connector-java.version>
 | 
					        <mysql-connector-java.version>5.1.46</mysql-connector-java.version>
 | 
				
			||||||
        <druid.version>1.2.4</druid.version>
 | 
					        <druid.version>1.2.4</druid.version>
 | 
				
			||||||
        <mybatis-plus.version>3.4.1</mybatis-plus.version>
 | 
					        <mybatis-plus.version>3.4.1</mybatis-plus.version>
 | 
				
			||||||
 | 
					        <redisson.version>3.13.6</redisson.version>
 | 
				
			||||||
        <!-- 工具类相关 -->
 | 
					        <!-- 工具类相关 -->
 | 
				
			||||||
        <org.projectlombok.version>1.16.14</org.projectlombok.version>
 | 
					        <org.projectlombok.version>1.16.14</org.projectlombok.version>
 | 
				
			||||||
        <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
 | 
					        <org.mapstruct.version>1.3.0.Final</org.mapstruct.version>
 | 
				
			||||||
 | 
					        <jjwt.version>0.9.1</jjwt.version>
 | 
				
			||||||
 | 
					        <fastjson.version>1.2.75</fastjson.version>
 | 
				
			||||||
 | 
					        <hutool.version>5.5.6</hutool.version>
 | 
				
			||||||
    </properties>
 | 
					    </properties>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- 依赖声明 -->
 | 
					    <!-- 依赖声明 -->
 | 
				
			||||||
@@ -190,6 +195,13 @@
 | 
				
			|||||||
    <packaging>jar</packaging>
 | 
					    <packaging>jar</packaging>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
 | 
					        <!-- Spring 核心 -->
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <!-- 用于生成自定义的 Spring @ConfigurationProperties 配置类的说明文件 -->
 | 
				
			||||||
 | 
					            <groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
					            <artifactId>spring-boot-configuration-processor</artifactId>
 | 
				
			||||||
 | 
					            <optional>true</optional>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- Web 相关 -->
 | 
					        <!-- Web 相关 -->
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
@@ -197,31 +209,82 @@
 | 
				
			|||||||
            <artifactId>spring-boot-starter-web</artifactId>
 | 
					            <artifactId>spring-boot-starter-web</artifactId>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
					            <artifactId>spring-boot-starter-security</artifactId>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.springframework.boot</groupId>
 | 
				
			||||||
 | 
					            <artifactId>spring-boot-starter-validation</artifactId>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.github.xiaoymin</groupId>
 | 
				
			||||||
 | 
					            <artifactId>knife4j-spring-boot-starter</artifactId>
 | 
				
			||||||
 | 
					            <version>${knife4j.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- DB 相关 -->
 | 
					        <!-- DB 相关 -->
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>mysql</groupId>
 | 
					            <groupId>mysql</groupId>
 | 
				
			||||||
            <artifactId>mysql-connector-java</artifactId>
 | 
					            <artifactId>mysql-connector-java</artifactId>
 | 
				
			||||||
            <version>${mysql-connector-java.version}</version>
 | 
					            <version>${mysql-connector-java.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.alibaba</groupId>
 | 
					            <groupId>com.alibaba</groupId>
 | 
				
			||||||
            <artifactId>druid-spring-boot-starter</artifactId>
 | 
					            <artifactId>druid-spring-boot-starter</artifactId>
 | 
				
			||||||
            <version>${druid.version}</version>
 | 
					            <version>${druid.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.baomidou</groupId>
 | 
					            <groupId>com.baomidou</groupId>
 | 
				
			||||||
            <artifactId>mybatis-plus-boot-starter</artifactId>
 | 
					            <artifactId>mybatis-plus-boot-starter</artifactId>
 | 
				
			||||||
            <version>${mybatis-plus.version}</version>
 | 
					            <version>${mybatis-plus.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.redisson</groupId>
 | 
				
			||||||
 | 
					            <artifactId>redisson-spring-boot-starter</artifactId>
 | 
				
			||||||
 | 
					            <version>${redisson.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        <!-- 工具类相关 -->
 | 
					        <!-- 工具类相关 -->
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>org.projectlombok</groupId>
 | 
					            <groupId>org.projectlombok</groupId>
 | 
				
			||||||
            <artifactId>lombok</artifactId>
 | 
					            <artifactId>lombok</artifactId>
 | 
				
			||||||
            <version>${org.projectlombok.version}</version>
 | 
					            <version>${org.projectlombok.version}</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>io.jsonwebtoken</groupId>
 | 
				
			||||||
 | 
					            <artifactId>jjwt</artifactId>
 | 
				
			||||||
 | 
					            <version>${jjwt.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.alibaba</groupId>
 | 
				
			||||||
 | 
					            <artifactId>fastjson</artifactId>
 | 
				
			||||||
 | 
					            <version>${fastjson.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>org.projectlombok</groupId>
 | 
				
			||||||
 | 
					            <artifactId>lombok</artifactId>
 | 
				
			||||||
 | 
					            <version>${org.projectlombok.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <!-- 解析客户端操作系统、浏览器等 TODO 芋艿:后面看看 hutool 有没替代 -->
 | 
				
			||||||
 | 
					            <groupId>eu.bitwalker</groupId>
 | 
				
			||||||
 | 
					            <artifactId>UserAgentUtils</artifactId>
 | 
				
			||||||
 | 
					            <version>1.21</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>cn.hutool</groupId>
 | 
				
			||||||
 | 
					            <artifactId>hutool-core</artifactId>
 | 
				
			||||||
 | 
					            <version>${hutool.version}</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					package cn.iocoder.dashboard.framework.swagger.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 | 
				
			||||||
 | 
					import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 | 
				
			||||||
 | 
					import org.springframework.boot.context.properties.EnableConfigurationProperties;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
 | 
					import org.springframework.http.HttpHeaders;
 | 
				
			||||||
 | 
					import springfox.documentation.builders.ApiInfoBuilder;
 | 
				
			||||||
 | 
					import springfox.documentation.builders.PathSelectors;
 | 
				
			||||||
 | 
					import springfox.documentation.service.*;
 | 
				
			||||||
 | 
					import springfox.documentation.spi.DocumentationType;
 | 
				
			||||||
 | 
					import springfox.documentation.spi.service.contexts.SecurityContext;
 | 
				
			||||||
 | 
					import springfox.documentation.spring.web.plugins.Docket;
 | 
				
			||||||
 | 
					import springfox.documentation.swagger2.annotations.EnableSwagger2;
 | 
				
			||||||
 | 
					import springfox.documentation.service.ApiKey;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Arrays;
 | 
				
			||||||
 | 
					import java.util.Collections;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import static springfox.documentation.builders.RequestHandlerSelectors.basePackage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Swagger2 自动配置类
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author 芋道源码
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Configuration
 | 
				
			||||||
 | 
					@EnableSwagger2
 | 
				
			||||||
 | 
					@EnableKnife4j
 | 
				
			||||||
 | 
					@ConditionalOnClass({Docket.class, ApiInfoBuilder.class})
 | 
				
			||||||
 | 
					@ConditionalOnProperty(prefix = "yudao.swagger", value = "enable", matchIfMissing = true)
 | 
				
			||||||
 | 
					// 允许使用 swagger.enable=false 禁用 Swagger
 | 
				
			||||||
 | 
					@EnableConfigurationProperties(SwaggerProperties.class)
 | 
				
			||||||
 | 
					public class SwaggerAutoConfiguration {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    @ConditionalOnMissingBean
 | 
				
			||||||
 | 
					    public SwaggerProperties swaggerProperties() {
 | 
				
			||||||
 | 
					        return new SwaggerProperties();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public Docket createRestApi() {
 | 
				
			||||||
 | 
					        SwaggerProperties properties = swaggerProperties();
 | 
				
			||||||
 | 
					        // 创建 Docket 对象
 | 
				
			||||||
 | 
					        return new Docket(DocumentationType.SWAGGER_2)
 | 
				
			||||||
 | 
					                // 用来创建该 API 的基本信息,展示在文档的页面中(自定义展示的信息)
 | 
				
			||||||
 | 
					                .apiInfo(apiInfo(properties))
 | 
				
			||||||
 | 
					                // 设置扫描指定 package 包下的
 | 
				
			||||||
 | 
					                .select()
 | 
				
			||||||
 | 
					                .apis(basePackage(properties.getBasePackage()))
 | 
				
			||||||
 | 
					                .paths(PathSelectors.any())
 | 
				
			||||||
 | 
					                .build()
 | 
				
			||||||
 | 
					                .securitySchemes(securitySchemes())
 | 
				
			||||||
 | 
					                .securityContexts(securityContexts())
 | 
				
			||||||
 | 
					//                .pathMapping() TODO 芋艿:稍后解决,统一 api 前缀
 | 
				
			||||||
 | 
					                ;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * API 摘要信息
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static ApiInfo apiInfo(SwaggerProperties properties) {
 | 
				
			||||||
 | 
					        return new ApiInfoBuilder()
 | 
				
			||||||
 | 
					                .title(properties.getTitle())
 | 
				
			||||||
 | 
					                .description(properties.getDescription())
 | 
				
			||||||
 | 
					                .contact(new Contact(properties.getAuthor(), null, null))
 | 
				
			||||||
 | 
					                .version(properties.getVersion())
 | 
				
			||||||
 | 
					                .build();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 安全模式,这里配置通过请求头 Authorization 传递 token 参数
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static List<SecurityScheme> securitySchemes() {
 | 
				
			||||||
 | 
					        return Collections.singletonList(new ApiKey(HttpHeaders.AUTHORIZATION, "Authorization", "header"));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 安全上下文
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @see #securitySchemes()
 | 
				
			||||||
 | 
					     * @see #authorizationScopes()
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    private static List<SecurityContext> securityContexts() {
 | 
				
			||||||
 | 
					        return Collections.singletonList(SecurityContext.builder()
 | 
				
			||||||
 | 
					                .securityReferences(securityReferences())
 | 
				
			||||||
 | 
					                .forPaths(PathSelectors.regex("^(?!auth).*$"))
 | 
				
			||||||
 | 
					                .build());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static List<SecurityReference> securityReferences() {
 | 
				
			||||||
 | 
					        return Collections.singletonList(new SecurityReference(HttpHeaders.AUTHORIZATION, authorizationScopes()));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static AuthorizationScope[] authorizationScopes() {
 | 
				
			||||||
 | 
					        return new AuthorizationScope[]{new AuthorizationScope("global", "accessEverything")};
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					package cn.iocoder.dashboard.framework.swagger.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import lombok.Data;
 | 
				
			||||||
 | 
					import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.validation.constraints.NotEmpty;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Swagger 配置属性
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author 芋道源码
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@ConfigurationProperties("yudao.swagger")
 | 
				
			||||||
 | 
					@Data
 | 
				
			||||||
 | 
					public class SwaggerProperties {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 标题
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotEmpty(message = "标题不能为空")
 | 
				
			||||||
 | 
					    private String title;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 描述
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotEmpty(message = "描述不能为空")
 | 
				
			||||||
 | 
					    private String description;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 作者
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotEmpty(message = "作者不能为空")
 | 
				
			||||||
 | 
					    private String author;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 版本
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotEmpty(message = "版本不能为空")
 | 
				
			||||||
 | 
					    private String version;
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 扫描的包
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @NotEmpty(message = "扫描的 package 不能为空")
 | 
				
			||||||
 | 
					    private String basePackage;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * 基于 Swagger + Knife4j 实现 API 接口文档
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author 芋道源码
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					package cn.iocoder.dashboard.framework.swagger;
 | 
				
			||||||
@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					<http://www.iocoder.cn/Spring-Boot/Swagger/?dashboard>
 | 
				
			||||||
@@ -1,7 +1,29 @@
 | 
				
			|||||||
spring:
 | 
					spring:
 | 
				
			||||||
  # 数据源配置项
 | 
					  # 数据源配置项 TODO 多数据源;TODO 监控配置
 | 
				
			||||||
  datasource:
 | 
					  datasource:
 | 
				
			||||||
    url: jdbc:mysql://127.0.1:3306/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
 | 
					    url: jdbc:mysql://127.0.1:3306/ruoyi-vue-pro?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CTT
 | 
				
			||||||
    driver-class-name: com.mysql.jdbc.Driver
 | 
					    driver-class-name: com.mysql.jdbc.Driver
 | 
				
			||||||
    username: root
 | 
					    username: root
 | 
				
			||||||
    password: 123456
 | 
					    password: 123456
 | 
				
			||||||
 | 
					  # redis 配置 TODO 需要进行下,对接到 redisson
 | 
				
			||||||
 | 
					  redis:
 | 
				
			||||||
 | 
					    # 地址
 | 
				
			||||||
 | 
					    host: localhost
 | 
				
			||||||
 | 
					    # 端口,默认为6379
 | 
				
			||||||
 | 
					    port: 6379
 | 
				
			||||||
 | 
					    # 数据库索引
 | 
				
			||||||
 | 
					    database: 0
 | 
				
			||||||
 | 
					    # 连接超时时间
 | 
				
			||||||
 | 
					    timeout: 10s
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 芋道配置项,设置当前项目所有自定义的配置
 | 
				
			||||||
 | 
					yudao:
 | 
				
			||||||
 | 
					  security:
 | 
				
			||||||
 | 
					    token-header: Authorization
 | 
				
			||||||
 | 
					    token-secret: abcdefghijklmnopqrstuvwxyz
 | 
				
			||||||
 | 
					    token-expires: 30m
 | 
				
			||||||
 | 
					  swagger:
 | 
				
			||||||
 | 
					    title: 管理后台
 | 
				
			||||||
 | 
					    description: 提供管理员管理的所有功能
 | 
				
			||||||
 | 
					    version: 1.0.0
 | 
				
			||||||
 | 
					    base-package: cn.iocoder.dashboard.modules
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user