springboot中swagger快速启动流程
介绍
可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调。
多应用
当然在单个应用大家可以配置SwaggerConfig类加载下buildDocket,就可以快速构建好swagger了。
代码大致如下:
/** * Swagger2配置类 * 在与spring boot集成时,放在与Application.java同级的目录下。 * 通过@Configuration注解,让Spring来加载该类配置。 * 再通过@EnableSwagger2注解来启用Swagger2。 */ @Configuration @EnableSwagger2 public class SwaggerConfig { /** * 创建API应用 * apiInfo() 增加API相关信息 * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现, * 本例采用指定扫描的包路径来定义指定要建立API的目录。 * * @return */ @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() .apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller")) .paths(PathSelectors.any()) .build(); } /** * 创建该API的基本信息(这些基本信息会展现在文档页面中) * 访问地址:http://项目实际地址/swagger-ui.html * @return */ private ApiInfo apiInfo() { return new ApiInfoBuilder() .title("Spring Boot中使用Swagger2构建RESTful APIs") .description("更多请关注http://www.baidu.com") .termsOfServiceUrl("http://www.baidu.com") .contact("sunf") .version("1.0") .build(); } }
3|0模块化-Starter
缘由
有开发过微服务的小伙伴应该体会过。当微服务模块多的情况下,每个模块都需要配置这样的一个类进行加载swagger。造成每个模块都存在大致一样的SwaggerConfig,
极端的情况下,有些朋友复制其他模块的SwaggerConfig
进行改造之后,发现仍然加载不出swagger的情况,造成明明是复制的,为何还加载不出,排查此bug及其费时间。
在此之上,可以构建出一个swagger-starter
模块,只需要引用一个jar,加载一些特殊的配置,就可以快速的使用到swagger的部分功能了。
设计
- 创建模块swagger-spring-boot-starter。
- 功能大致如下:
- 加载SwaggerConfig。
通过配置化配置swagger。
Enable加载注解。
1. 创建SwaggerConfig
SwaggerConfig和之前的一致,只是里面的配置需要外部化。
@Configuration @PropertySource(value = "classpath:swagger.properties", ignoreResourceNotFound = true, encoding = "UTF-8") @EnableConfigurationProperties(SwaggerProperties.class) public class SwaggerConfig { @Resource private SwaggerProperties swaggerProperties; @Bean public Docket buildDocket() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(buildApiInf()) .select() .apis(RequestHandlerSelectors.basePackage("")) .paths(PathSelectors.any()) .build(); } private ApiInfo buildApiInf() { return new ApiInfoBuilder() .title(swaggerProperties.getTitle()) .description(swaggerProperties.getDescription()) .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl()) .contact(new Contact("skyworth", swaggerProperties.getTermsOfServiceUrl(), "")) .version(swaggerProperties.getVersion()) .build(); } }
2. 创建SwaggerProperties 配置相关
配置通过@PropertySource
注解加载resources目录下的swagger.properties
。
创建SwaggerProperties
配置类,这个类里包含了一般swagger初始化要使用的一些常用的属性,如扫描包路径、title等等。
@Data @ToString @ConfigurationProperties(SwaggerProperties.PREFIX) public class SwaggerProperties { public static final String PREFIX = "swagger"; /** * 文档扫描包路径 */ private String basePackage = ""; /** * title 如: 用户模块系统接口详情 */ private String title = "深兰云平台系统接口详情"; /** * 服务文件介绍 */ private String description = "在线文档"; /** * 服务条款网址 */ private String termsOfServiceUrl = "https://www.deepblueai.com/"; /** * 版本 */ private String version = "V1.0"; }
做好这两件事情基本大工搞成了,为了更好的使用配置,在idea里和官方starter包一样,我们还需要配置一个additional-spring-configuration-metadata.json
,让我们自己的配置也具有提示的功能,具体介绍请产考:配置提示 配置提示 配置提示 配置提示 配置提示 ...
3. 加载SwaggerConfig等特性
因为是starter模块,可能他人的项目目录和starter模块的目录不一致,导致加载不到SwaggerConfig类,我们需要使用spring.factories把SwaggerConfig类装载到spring容器。
resources/META-INF
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ io.purge.swagger.SwaggerConfig
当然本次基于Enable方式去加载SwaggerConfig。
创建@EnableSwaggerPlugins
注解类,使用@Import(SwaggerConfig.class)
将SwaggerConfig导入大工搞成。
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Import(SwaggerConfig.class) @EnableSwagger2 public @interface EnableSwaggerPlugins { }
4|0使用
添加依赖
把自己编写好的swagger通过maven打包,自己项目引用。
<dependency> <groupId>com.purge.swagger</groupId> <artifactId>swagger-spring-boot-starter<factId> <version>0.1.0.RELEASE</version> </dependency>
配置swagger.properties文件
在自己项目模块的resources目录下 创建swagger.properties配置
swagger.properties 大致配置如下
swagger.basePackage="swagger扫描项目包路径" swagger.title="swagger网页显示标题" swagger.description="swagger网页显示介绍"
启动类添加@EnableSwaggerPlugins注解。
@EnableSwaggerPlugins @SpringBootApplication public class FrontDemoApplication { public static void main(String[] args) { SpringApplication.run(FrontDemoApplication.class, args); } }
访问http://ip:端口/swagger-ui.html检查swagger-ui是否正常。
5|0总结
简单的starter代码编写可以减少新模块的复杂性,只需要简单的配置就可以使用相应的特性,减少复制代码不必要的错误。
示例代码地址: swagger-spring-boot
以上所述是小编给大家介绍的springboot中swagger快速启动流程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
- ASP.NET路由系统实现原理:HttpHandler的动态映射
- 腾讯、卓健科技、恩泽医疗合力打造“互联网+智慧医院”
- 区块链,不是比特币(1)
- 小程序缓存 删不删你都该知道的事儿
- 32位 or 64位:Apache CloudStack系统VM架构选择
- Apache CloudStack系统VM架构选择
- ASP.NET MVC Controller激活系统详解:IoC的应用[下篇]
- 使用Docker的Alluxio群集设置
- 通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流程[中]:管道如何处理请求
- ASP.NET MVC Model元数据及其定制: 初识Model元数据
- 如何在企业中融入机器学习
- How ASP.NET MVC Works?
- 如果没有Visual Studio 2015,我们如何创建.NET Core项目 ?
- “前.NET Core时代”如何实现跨平台代码重用 ——源文件重用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 微信小程序开发实战(23):WebSocket实战
- 谁告诉的你们Python是强类型语言!站出来,保证不打你!
- 项目内容细分
- 『算法理论学』深度学习推理加速方法之网络层与算子融合
- 【剑指Offer】链表中倒数第k个字节
- pyplot只有两个数值做barplot
- 两个矩阵对应位置相除
- 基于openresty的URL 断路器/熔断器 -- URL-fuse
- 温故知新——Spring AOP(二)
- 2020年,你应该知道 23 个非常有用的 NodeJs 库
- 面试题系列第4篇:重写了equals方法,为什么还要重写hashCode方法?
- LPC17XX之SSP0/1接口
- 宝塔打开ssl面板后打不开登录界面的解决方法
- 记录一下vuedraggable clone的坑,获取数据
- Go语言|go version命令的高级用法