springBoot详解集成Swagger流程

目录
  • Swagger简介
  • SpringBoot集成Swagger
  • 配置Swagger
  • Swagger配置扫描接口
  • 配置是否启动Swagger
  • 配置API文档的分组
  • 实体类配置
  • 常用的注解
  • 小结

目标:

  • 了解Swagger的作用和概念
  • 了解前后端分离
  • 在springBoot中集成Swagger

Swagger简介

前后端分离

VUE+springBoot

  • 后端 :后端控制层、服务层、数据访问层
  • 前端 :前端控制层、视图层
  • 前后端通过API进行交互
  • 前后端相对独立,松耦合
  • 可以部署在不同的服务器上

产生的问题

前后端集成,前端或者后端无法做到“及时协商,尽早解决”,最终导致问题集中爆发

解决方案

首先定义计划的提纲,并实时跟踪最新的API,降低集成风险

Swagger

  • 号称世界上最流行的API框架
  • Restful Api 文档在线自动生成器 =>API 文档 与API 定义同步更新
  • 直接运行,可以在线测试API接口;
  • 支持多种语言 (如:Java,PHP等)
  • 官网:https://swagger.io/

SpringBoot集成Swagger

新建一个springboot-web项目

下载maven依赖https://mvnrepository.com/search?q=springfox

<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

高版本是没有第5部的测试页面

3.0.0版本的要先在启动类中加上注解@EnableOpenApi先在导入<groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId>

编写Controller,测试运行成功

配置Swagger=》在包Config下

package com.hxl.config;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2 //开启swagger2
public class SwaggerConfig {
}

测试运行:http://localhost:8080/swagger-ui.html

配置Swagger

Swagger实例Bean是Docket,所以通过配置Docket实例来配置Swaggger。

//配置了Swagger的Docket实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2);
}

再通过ApiInfo()属性配置文档信息

private ApiInfo apiInfo(){
    //作者信息
    Contact contact = new Contact("王木木","https://blog.csdn.net/qq_43585922?spm=1000.2115.3001.5343","11@qq.com");
    return new ApiInfo(
        "Swagger笔记", //标题
        "冲冲冲", //描述
        "v1.0。0", //版本
        "https://blog.csdn.net/qq_43585922?spm=1000.2115.3001.5343", //组织链接
        contact, //联系人信息
        "Apach 2.0 许可", //许可
        "许可链接", //许可连接
        new ArrayList<>()//扩展
    );
}

Docket关联上ApiInfo

@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
}

启动项目,访问http://localhost:8080/swagger-ui.html

Swagger配置扫描接口

构建Docket时通过select()方法配置怎么扫描接口。select()build()是一套的

//配置了Swagger的Docket实例
@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .select()
        /*
                RequestHandlerSelectors:要扫描接口的方式
                basePackage:指定要扫描的包
                any():扫描全部
                none():不扫描
                withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
                withMethodAnnotation:扫描方法上的注解
                path():过滤什么路径
                */
        .apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
        //.paths(PathSelectors.ant("/hxl/**"))
        .build();
}

我们看之前的运行结构可以看到有base-error-controllerhello-controller,一旦使用了上述配置后,运行结果只有hello-controller

配置是否启动Swagger

通过enable()方法配置是否启用swagger

@Bean
public Docket docket(){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        //enable是否启动Swagger,默认为true,如果该位false则不能在浏览器中访问
        .enable(false)
        .select()
        /*
                RequestHandlerSelectors:要扫描接口的方式
                basePackage:指定要扫描的包
                any():扫描全部
                none():不扫描
                withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象
                withMethodAnnotation:扫描方法上的注解
                path():过滤什么路径
                */
        .apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
        //.paths(PathSelectors.ant("/hxl/**"))
        .build();
}

Swagger在生产环境中使用,在发布的时候不使用

  • 判断是否是生产环境
  • 注入enable()值

当我们有多个生产环境时。比如说application-dev.yamlapplication-pro.yaml。动态设置当前项目处于dev时显示swagger,Pro是不显示

#哪个环境生效
spring.profiles.active=dev

设置我们的dev走8081,默认走8080,pro走8082

然后修改我们的配置

@Bean
public Docket docket(Environment environment){
    //设置显示的Swagger环境
    Profiles profiles = Profiles.of("dev", "test");
    //通过  判断是否处在自己设定的环境中
    boolean flag = environment.acceptsProfiles(profiles);
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        //这里变成了flag
        .enable(flag)
        .select()
        .apis(RequestHandlerSelectors.basePackage("com.hxl.controller"))
        .build();
}

此时我们就发现,如果我们走默认的8080是没有Swagger的,走8081才有

配置API文档的分组

@Bean
public Docket docket(Environment environment){
    return new Docket(DocumentationType.SWAGGER_2)
        .apiInfo(apiInfo())
        .groupName("王木木");
    //其余配置省略
}

启动项目就发现我们的组别有了

如果有多个分组怎么办?只需要配置多个docket即可

//其他的环境需要自己填
@Bean
public Docket docket1(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("天");
}
@Bean
public Docket docket2(){
    return new Docket(DocumentationType.SWAGGER_2).groupName("狼");
}

实体类配置

创建一个实体类

package com.hxl.pojo;
public class User {
    public String username;
    public String password;
}

只要这个实体在请求接口的返回值上,就可以映射到实体项中

//只要我们的接口中,返回值存在实体类,他就会扫描到Swagger中
@PostMapping("/user")
public User user(){
    return new User();
}

测试

此时发现我们的Model中有了User。如果有中文的注释,只需要在加两个注解

package com.hxl.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
//@Api("注释")
@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("姓名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}

测试

常用的注解

Swagger的所有注解定义在io.swagger.annotations包下

Swagger注解 简单说明
@Api(tags = “xxx模块说明”) 作用在模块类上
@ApiOperation(“xxx接口说明”) 作用在接口方法上
@ApiModel(“xxxPOJO说明”) 作用在模型类上:如VO、BO
@ApiModelProperty(value = “xxx属性说明”,hidden = true) 作用在类方法和属性上,hidden设置为true可以隐藏该属性
@ApiParam(“xxx参数说明”) 作用在参数、方法和字段上

注解在类上的可以看一下上面的,接下来看注解在接口方法上,以及参数上

@ApiOperation("王木木的接口")
@PostMapping("/hxl")
public String hxl(@ApiParam("用户名")String username){
    return username;
}

在这里还可以进行测试

小结

  • 我们可以通过Swagger给一些比较难理解的属性或者接口增加注释信息
  • 接口文档实时更新
  • 可以在线测试
  • 在正式发布的时候一定要关闭Swagger《安全;节省运行的内存》

到此这篇关于springBoot详解集成Swagger流程的文章就介绍到这了,更多相关springBoot Swagger内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot2.6.x升级后循环依赖及Swagger无法使用问题

    最近想体验下最新版本的SpringBoot,逛了下官网,发现SpringBoot目前最新版本已经是2.6.4了,版本更新确实够快的.之前的项目升级了2.6.4版本后发现有好多坑,不仅有循环依赖的问题,连Swagger都没法用了!今天给大家分享下升级过程,填一填这些坑! SpringBoot实战电商项目mall(50k+star)地址:https://github.com/macrozheng/mall 聊聊SpringBoot版本 首先我们来聊聊SpringBoot的版本,目前最新版本是2.6.

  • springboot详解整合swagger方案

    目录 1.Swagger简介 2.整合步骤 1.Swagger简介 Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务. 官网: ( https://swagger.io/ ) 主要作用是: 1. 使得前后端分离开发更加方便,有利于团队协作 2. 接口的文档在线自动生成,降低后端开发人员编写接口文档的负担 3. 功能测试 Spring已经将Swagger纳入自身的标准,建立了Spring-swagger项目,现在叫 Springfox.通过

  • Springboot2.6.x高版本与Swagger2版本冲突问题解决方法

    目录 问题: 原因 完整解决方案: 问题: Spring Boot 2.6.x版本引入依赖 springfox-boot-starter (Swagger 3.0) 后,启动容器会报错: Failed to start bean ‘ documentationPluginsBootstrapper ‘ ; nested exception… 原因 Springfox 假设 Spring MVC 的路径匹配策略是 ant-path-matcher,而 Spring Boot 2.6.x版本的默认匹

  • Springboot整合Swagger3全注解配置(springdoc-openapi-ui)

    目录 一.创建Springboot项目,引入pom依赖 二.配置类请求头携带token 三.配置文件 四.接口定义 五.实现类 六.实体类定义 七.运行项目查看效果 一.创建Springboot项目,引入pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </depend

  • Springboot配置Swagger2登录密码的实现

    目录 Swagger 一.配置Swagger 二.配置Swagger登录密码 Swagger Swagger是使用OpenAPI规范(OAS)开发API的最广泛使用的工具生态系统.Swagger由开源和专业工具组成,满足几乎所有的需求和用例. 一.配置Swagger 添加依赖 // web依赖 <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId&g

  • springboot swagger不显示接口的问题及解决

    目录 springboot swagger不显示接口 swagger不显示接口的可能性 springboot swagger不显示接口 @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .select() //此包路径下的类,才生成接口文档 .apis(RequestHandlerSelectors.basePackage("org.je

  • SpringBoot使用Swagger范例讲解

    目录 1. Swagger 介绍 2. 使用Swagger接口文档框架 1. Swagger 介绍 在一个项目开发过程中,当前端开发人员根据后端开发人员给出的 API 接口文档进行接口联调对接时,可能会出现这样的矛盾:前端开发人员抱怨后端开发人员给出的 API 接口文档和实际的情况有所出入,而后端开发人员由于繁重的开发任务已经身心俱疲,想到自己还要负责维护接口文档的任务更是不堪重负. 这时就需要一个解决方案,希望它能够在后端开发人员进行接口开发时,能够帮助后端工程师自动生成相应的接口文档,当接口

  • 解决springboot引入swagger2不生效问题

    目录 问题描述: springboot引入swagger2的步骤: ①引入依赖 ②编写Swagger2的配置类 ③在controller中添加注解:按需添加注解 ④在model(pojo)上加注解,按需添加 一些注解的使用 今天遇到跟同事遇到一个由于失误导致的问题,也可以说比较难发现了.在此记录一下(我们用的springboot是2.0.3,swagger是2.2.2) 问题描述: swagger修改title,description等都不生效.并且启动springboot,没有有去加载swag

  • springBoot详解集成Swagger流程

    目录 Swagger简介 SpringBoot集成Swagger 配置Swagger Swagger配置扫描接口 配置是否启动Swagger 配置API文档的分组 实体类配置 常用的注解 小结 目标: 了解Swagger的作用和概念 了解前后端分离 在springBoot中集成Swagger Swagger简介 前后端分离 VUE+springBoot 后端 :后端控制层.服务层.数据访问层 前端 :前端控制层.视图层 前后端通过API进行交互 前后端相对独立,松耦合 可以部署在不同的服务器上

  • Springboot详解RocketMQ实现广播消息流程

    RocketMQ消息模式主要有两种:广播模式.集群模式(负载均衡模式) 广播模式是每个消费者,都会消费消息: 负载均衡模式是每一个消费只会被某一个消费者消费一次: 我们业务上一般用的是负载均衡模式,当然一些特殊场景需要用到广播模式,比如发送一个信息到邮箱,手机,站内提示: 我们可以通过@RocketMQMessageListener的messageModel属性值来设置,MessageModel.BROADCASTING是广播模式,MessageModel.CLUSTERING是默认集群负载均衡

  • Springboot详解RocketMQ实现消息发送与接收流程

    springboot+rockermq 实现简单的消息发送与接收 普通消息的发送方式有3种:单向发送.同步发送和异步发送. 下面来介绍下 springboot+rockermq 整合实现 普通消息的发送与接收 创建Springboot项目,添加rockermq 依赖 <!--rocketMq依赖--> <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-

  • Springboot详解实现食品仓库管理系统流程

    目录 一,项目简介 二,环境介绍 三,系统展示 3.1 系统功能模块设计 3.1.1 登录模块 3.1.2 客户管理模块 3.1.3 供应商管理功能 3.1.4 商品管理模块 3.1.5 商品进货管理模块 3.1.6 商品退货信息查询模块 四,核心代码展示 五,项目总结 一,项目简介 经过调查研究进行开发设计的这款仓库管理系统,主要是为商家提供商品货物进销存的信息化管理,以便让商家在竞争如此激烈的今天占据一定的优势和商机,通过信息化技术手段的应用来减少库存,提升周转率,降低成本,提高盈利. 仓库

  • SpringBoot详解整合Spring Boot Admin实现监控功能

    目录 监控 监控的意义 可视化监控平台 监控原理 自定义监控指标 监控 ​ 在说监控之前,需要回顾一下软件业的发展史.最早的软件完成一些非常简单的功能,代码不多,错误也少.随着软件功能的逐步完善,软件的功能变得越来越复杂,功能不能得到有效的保障,这个阶段出现了针对软件功能的检测,也就是软件测试.伴随着计算机操作系统的逐步升级,软件的运行状态也变得开始让人捉摸不透,出现了不稳定的状况.伴随着计算机网络的发展,程序也从单机状态切换成基于计算机网络的程序,应用于网络的程序开始出现,由于网络的不稳定性,

  • SpringBoot详解如何实现读写分离

    目录 前言 1.项目引入依赖 2.yml配置 3.启动 4.测试 5.中间所遇到的问题 前言 根据公司业务需求,项目需要读写分离,所以记录下读写分离的过程. 分为两个部分: 1.项目的读写分离. 2.mysql数据库的主从复制. 本篇使用的依赖包为sharding-jdbc-spring-boot-starter,也有考虑直接用dynamic-datasource-spring-boot-starter,但是需要在程序中显式的声明所指定的数据源,并且在从库>=2 的时候需要自己写算法进行读库的选

  • springboot详解实现车险理赔信息管理系统代码

    目录 一,项目简介 二,环境介绍 三,系统展示 四,核心代码展示 五,项目总结 一,项目简介 客户的主要功能:个人资料管理,购买的保险信息管理,理赔的申请 事故调查员功能:个人资料管理,事故调查管理,现场勘察管理 管理员功能:个人资料管理,用户管理,理赔审请审核,赔偿金发放管理 二,环境介绍 语言环境:Java: jdk1.8 数据库:Mysql: mysql5.7 应用服务器:Tomcat: tomcat8.5.31 开发工具:IDEA或eclipse 开发技术:后台springboot+sp

  • SpringBoot详解如果通过@Value注解给静态变量注入值

    目录 前序 方案一 方案二 方案三 使用场景 总结 最近做项目的时候,给static变量赋值, 使用 @value注解 ,结果 获取一直为null , 1.spring不允许/不支持把值注入到静态变量中 2.Spring的@Value依赖注入是依赖set方法 3.set方法是普通的对象方法 4.static变量是类的属性,static没有set方法 前序 SpringBoot中使用@Value()只能给普通变量注入值,不能直接给静态变量赋值 例如,application-dev.properti

  • SpringBoot详解如何进行整合Druid数据源

    目录 1.自定义方式 1.添加依赖 2.编写配置 3.测试 2.starter方式(推荐) 1.添加依赖 2.编写配置 3.测试 Druid是数据库连接池,它能够提供强大的监控和扩展功能.官方文档 Spring Boot整合第三方技术的两种方式: 自定义 找starter场景 1.自定义方式 使用自定义方式整合Druid 1.添加依赖 在pom.xml添加相关依赖 <!--数据库相关--> <dependency> <groupId>org.springframewor

随机推荐