通过Configuration装配Swaggers+knife4j属性(更为方便,安全的配置方式)
通过Configuration装配Swaggers+knife4j属性(更为方便,安全的配置方式)
1、系统配置(首先读取系统配置,把自定义属性对象作为系统对象的属性加入进来)
注解解释:
@Data:lombok包中的注解,作用在类上,提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法
@ConfigurationProperties 的基本用法非常简单:我们为每个要捕获的外部属性提供一个带有字段的类。请注意以下几点:
· 前缀定义了哪些外部属性将绑定到类的字段上
· 根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配
· 我们可以简单地用一个值初始化一个字段来定义一个默认值
· 类本身可以是包私有的
· 类的字段必须有公共 setter 方法
上代码:
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* @description:
* @author: YangMian
* @time: 2021/6/22 10:40
* @package: com.yang.barry.cn.blog.system.propertie
*/
@Data
@Component
@Configuration
@ConfigurationProperties(prefix = "blog")
public class SystemPropertie {
private SwaggerProperties swagger = new SwaggerProperties();
}
2、Swagger2需要的参数对象
/**
* @description:
* @author: YangMian
* @time: 2021/6/22 10:42
* @package: com.yang.barry.cn.blog.system.propertie
*/
@Data
public class SwaggerProperties {
private String basePackage;
private String title;
private String description;
private String version;
private String author;
private String url;
private String email;
private String license;
private String licenseUrl;
}
3、Swagger2的配置文件
在这里会遇到一个问题就是swagger2的核心包的版本问题,升级为2.9.2就可以了
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.yang.barry.cn.blog.system.propertie.SwaggerProperties;
import com.yang.barry.cn.blog.system.propertie.SystemPropertie;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.PathSelectors;
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;
import java.util.Collections;
/**
* @description:
* @author: YangMian
* @time: 2021/6/22 10:51
* @package: com.yang.barry.cn.blog.system.config
*/
@Configuration
@EnableSwagger2
@EnableKnife4j
public class SwaggerConfig {
@Autowired
private SystemPropertie properties;
@Bean
public Docket swaggerApi() {
SwaggerProperties swagger = properties.getSwagger();
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage(swagger.getBasePackage()))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo(swagger));
}
private ApiInfo apiInfo(SwaggerProperties swagger) {
return new ApiInfo(
swagger.getTitle(),
swagger.getDescription(),
swagger.getVersion(),
null,
new Contact(swagger.getAuthor(), swagger.getUrl(), swagger.getEmail()),
swagger.getLicense(), swagger.getLicenseUrl(), Collections.emptyList());
}
}
4、Yml配置文件写入配置
blog:
# Swagger相关配置
swagger:
basePackage: cc.yang.demo
title: Yang API
description: Yang API Document.
version: 2.0
author: Yang
url:
email:
license: Apache 2.0
licenseUrl: https://www.apache.org/licenses/LICENSE-2.0.html