springboot之swagger快速启动

简介

介绍

可能大家都有用过swagger,可以通过ui页面显示接口信息,快速和前端进行联调。

没有接触的小伙伴可以参考官网文章进行了解下demo页面

多应用

当然在单个应用大家可以配置SwaggerConfig类加载下buildDocket,就可以快速构建好swagger了。

代码大致如下:

  1. /**
  2. * Swagger2配置类
  3. * 在与spring boot集成时,放在与Application.java同级的目录下。
  4. * 通过@Configuration注解,让Spring来加载该类配置。
  5. * 再通过@EnableSwagger2注解来启用Swagger2。
  6. */
  7. @Configuration
  8. @EnableSwagger2
  9. public class SwaggerConfig {
  10. /**
  11. * 创建API应用
  12. * apiInfo() 增加API相关信息
  13. * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
  14. * 本例采用指定扫描的包路径来定义指定要建立API的目录。
  15. *
  16. * @return
  17. */
  18. @Bean
  19. public Docket createRestApi() {
  20. return new Docket(DocumentationType.SWAGGER_2)
  21. .apiInfo(apiInfo())
  22. .select()
  23. .apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller"))
  24. .paths(PathSelectors.any())
  25. .build();
  26. }
  27. /**
  28. * 创建该API的基本信息(这些基本信息会展现在文档页面中)
  29. * 访问地址:http://项目实际地址/swagger-ui.html
  30. * @return
  31. */
  32. private ApiInfo apiInfo() {
  33. return new ApiInfoBuilder()
  34. .title("Spring Boot中使用Swagger2构建RESTful APIs")
  35. .description("更多请关注http://www.baidu.com")
  36. .termsOfServiceUrl("http://www.baidu.com")
  37. .contact("sunf")
  38. .version("1.0")
  39. .build();
  40. }
  41. }

模块化-Starter

缘由

有开发过微服务的小伙伴应该体会过。当微服务模块多的情况下,每个模块都需要配置这样的一个类进行加载swagger。造成每个模块都存在大致一样的SwaggerConfig,极端的情况下,有些朋友复制其他模块的SwaggerConfig进行改造之后,发现仍然加载不出swagger的情况,造成明明是复制的,为何还加载不出,排查此bug及其费时间。

在此之上,可以构建出一个swagger-starter模块,只需要引用一个jar,加载一些特殊的配置,就可以快速的使用到swagger的部分功能了。

设计

创建模块swagger-spring-boot-starter

功能大致如下:

  1. 加载SwaggerConfig。
  2. 通过配置化配置swagger。
  3. Enable加载注解。

1. 创建SwaggerConfig

SwaggerConfig和之前的一致,只是里面的配置需要外部化。

  1. @Configuration
  2. @PropertySource(value = "classpath:swagger.properties", ignoreResourceNotFound = true, encoding = "UTF-8")
  3. @EnableConfigurationProperties(SwaggerProperties.class)
  4. public class SwaggerConfig {
  5. @Resource
  6. private SwaggerProperties swaggerProperties;
  7. @Bean
  8. public Docket buildDocket() {
  9. return new Docket(DocumentationType.SWAGGER_2)
  10. .apiInfo(buildApiInf())
  11. .select()
  12. .apis(RequestHandlerSelectors.basePackage(""))
  13. .paths(PathSelectors.any())
  14. .build();
  15. }
  16. private ApiInfo buildApiInf() {
  17. return new ApiInfoBuilder()
  18. .title(swaggerProperties.getTitle())
  19. .description(swaggerProperties.getDescription())
  20. .termsOfServiceUrl(swaggerProperties.getTermsOfServiceUrl())
  21. .contact(new Contact("skyworth", swaggerProperties.getTermsOfServiceUrl(), ""))
  22. .version(swaggerProperties.getVersion())
  23. .build();
  24. }
  25. }

2. 创建SwaggerProperties 配置相关

配置通过@PropertySource注解加载resources目录下的swagger.properties

创建SwaggerProperties配置类,这个类里包含了一般swagger初始化要使用的一些常用的属性,如扫描包路径、title等等。

  1. @Data
  2. @ToString
  3. @ConfigurationProperties(SwaggerProperties.PREFIX)
  4. public class SwaggerProperties {
  5. public static final String PREFIX = "swagger";
  6. /**
  7. * 文档扫描包路径
  8. */
  9. private String basePackage = "";
  10. /**
  11. * title 如: 用户模块系统接口详情
  12. */
  13. private String title = "深兰云平台系统接口详情";
  14. /**
  15. * 服务文件介绍
  16. */
  17. private String description = "在线文档";
  18. /**
  19. * 服务条款网址
  20. */
  21. private String termsOfServiceUrl = "https://www.deepblueai.com/";
  22. /**
  23. * 版本
  24. */
  25. private String version = "V1.0";
  26. }

做好这两件事情基本大工搞成了,为了更好的使用配置,在idea里和官方starter包一样,我们还需要配置一个additional-spring-configuration-metadata.json,让我们自己的配置也具有提示的功能,具体介绍请产考:配置提示 配置提示 配置提示 配置提示 配置提示 ...

3. 加载SwaggerConfig等特性

因为是starter模块,可能他人的项目目录和starter模块的目录不一致,导致加载不到SwaggerConfig类,我们需要使用spring.factoriesSwaggerConfig类装载到spring容器。

resources/META-INF

  1. org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  2. io.purge.swagger.SwaggerConfig

当然本次基于Enable方式去加载SwaggerConfig

创建@EnableSwaggerPlugins注解类,使用@Import(SwaggerConfig.class)SwaggerConfig导入大工搞成。

  1. @Retention(RetentionPolicy.RUNTIME)
  2. @Target(ElementType.TYPE)
  3. @Import(SwaggerConfig.class)
  4. @EnableSwagger2
  5. public @interface EnableSwaggerPlugins {
  6. }

使用

添加依赖

把自己编写好的swagger通过maven打包,自己项目引用。

  1. <dependency>
  2. <groupId>com.purgeteam</groupId>
  3. <artifactId>swagger-spring-boot-starter<factId>
  4. <version>0.1.0.RELEASE</version>
  5. </dependency>

配置swagger.properties文件

  • 在自己项目模块的resources目录下 创建swagger.properties配置

  • swagger.properties 大致配置如下

  1. swagger.basePackage="swagger扫描项目包路径"
  2. swagger.title="swagger网页显示标题"
  3. swagger.description="swagger网页显示介绍"

启动类添加@EnableSwaggerPlugins注解。

  1. @EnableSwaggerPlugins
  2. @SpringBootApplication
  3. public class FrontDemoApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(FrontDemoApplication.class, args);
  6. }
  7. }

访问http://ip:端口/swagger-ui.html检查swagger-ui是否正常。

总结

简单的starter代码编写可以减少新模块的复杂性,只需要简单的配置就可以使用相应的特性,减少复制代码不必要的错误。

示例代码地址: swagger-spring-boot

springboot之swagger快速启动的更多相关文章

  1. springboot之swagger快速启动(新的ui)

    springboot之swagger快速启动(新的ui) 功能点: 集成swagger前端接口文档 Swagger 整合 zuul 智能列表 无缝集成 knife4j 前端文档 支持 v0.1.2RE ...

  2. SpringBoot项目快速启动停止脚本

    SpringBoot项目快速启动停止脚本 1.在jar包同级目录下,创建 app.sh #!/bin/bash appName=`ls|grep .jar$` if [ -z $appName ] t ...

  3. Springboot 完整搭建快速入门,必看!

    前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...

  4. 1.SpringBoot之Helloword 快速搭建一个web项目

    背景: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配 ...

  5. springboot 集成swagger ui

    springboot 配置swagger ui 1. 添加依赖 <!-- swagger ui --> <dependency> <groupId>io.sprin ...

  6. SpringBoot整合Swagger和Actuator

    前言 本篇文章主要介绍的是SpringBoot整合Swagger(API文档生成框架)和SpringBoot整合Actuator(项目监控)使用教程. SpringBoot整合Swagger 说明:如 ...

  7. SpringBoot+SpringMVC+MyBatis快速整合搭建

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  8. SpringBoot整合Swagger实战

    源码地址:https://github.com/laolunsi/spring-boot-examples 目前SpringBoot常被用于开发Java Web应用,特别是前后端分离项目.为方便前后端 ...

  9. springboot笔记02——快速入门quickstart

    前言 学习一个新的框架,往往会用一个quickstart快速入门,这次就写一下springboot的quickstart程序. 开发环境 JDK 1.8 Springboot 2.1.6 Maven ...

随机推荐

  1. LeetCode 448. Find All Numbers Disappeared in an Array找到所有数组中消失的元素

    题目 给定一个范围在 1 ≤ a[i] ≤ n ( n = 数组大小 ) 的 整型数组,数组中的元素一些出现了两次,另一些只出现一次. 找到所有在 [1, n] 范围之间没有出现在数组中的数字. 您能 ...

  2. 19.包 logging 的使用

    包 什么是包: ---文件夹下具有__init__.py文件就是一个包 推荐使用 from . import 包的导入; from ss.bake.api.policy import func --- ...

  3. 关于input[type='checkbox']全选的问题

    今天在做一个全选功能的时候,发现了一个问题,就是如果我在选择全选之前,我就已经选择了一个input,然后我再去选择全选并且以后再取消全选的时候,这个我之前选择的input始终处于选择状态,但是他的ch ...

  4. Hadoop单机、伪分布式、分布式集群搭建

    JDK安装 设置hostname [root@bigdata111 ~]# vi /etc/hostname 设置机器hosts [root@bigdata111 ~]# vi /etc/hosts ...

  5. node获取本机动态IP,并对应修改相关JavaScript文件的IP地址

    目录 由于本机是自动获取分配的动态IP,所以每次重启后需要重新更改与IP相关文件 参考 时间:2018-08-02,更新时间:2018-11-06 注意:在win10环境运行无问题 由于本机是自动获取 ...

  6. 变量Variable

    变量Variable 内存 #conding:utf-8 a = 1 #conding:utf-8 a = 1 b = a #conding:utf-8 a = 1 b = a a = 2 命名规则 ...

  7. [原创实践]redhat linux 5.3搭建Nexus

    1:下载安装JDK,配置好环境变量(JAVA_HOME等) 下载linux下64位的jdk-7u45-linux-x64.tar.gz(百度网盘下载,官网的jdk-7u51-linux-x64.tar ...

  8. 简单认识Nginx---负载均衡

    中大型项目都会考虑到分布式,前面几篇文章着重介绍了数据处理的技术集群.今天来研究一下关于服务器的负载均衡–Nginx.他除了静态资源的处理外还有可以决定将请求置于那台服务上. Nginx的安装 点我下 ...

  9. 利用反射搭建orm框架

    1思路 根据java反射获取属性上的 注解的value的值 然后拼接成sql去执行 这就是完成了一个orm实体关系映射 package src.Test.Reflect;import java.lan ...

  10. 【Vue的路由,SPA概念】

    前言 本章是为了以后实现前端页面的搭建而写的, 重点在于如何实现 单页Web应用 因为相对于以前的传统多页面web,有很大的缺陷. 那么就必须了解一下Vue的路由设置. SPA的概念 总的而言,我们知 ...