Springboot集成Swagger(Swagger学习笔记)

目  录

一、Swagger介绍

二、Springboot集成Swagger

1. Springfor—jar包

2. 使用Swagger一般步骤

1、准备好一个SpringBoot项目

2、添加Maven依赖

3、编写SwaggerConfig配置Swagger

4、访问测试 

3. 配置Swagger

1、配置Docket实例

2、通过apiInfo()属性配置文档信息

3、Docket实例关联上apiInfo()

4. 配置扫描接口

1、构建Docket时通过select()方法配置扫描接口

2、可以选择配置接口扫描过滤

5. 配置Swagger开关

1、通过enable()方法配置是否启用Swagger

2、动态配置项目处于开发环境显示Swagger

3、在项目中增加一个dev的配置文件设置开发环境

6. 配置API分组

1、通过groupName()方法配置分组

2、配置多个分组

3、启动项目查看swagger界面

7. 实体类配置

1、给实体类加中文注释

2、启动项目查看swagger界面的moudle模块 

三、Swagger接口测试

1. 以登录接口为例

2. 登录成功

3. 登陆失败

四、常用注解

1. Swagge注解

2. 给请求的接口配置注释

五、Swagger其它jar包界面皮肤

1.springfox

2. bootstrap-ui  

3. Layui-ui 

4. mg-ui  

 六、本人常用的Swagger配置文件


一、Swagger介绍

Swagger是个优秀的工具,现在国内已经有很多的中小型互联网公司都在使用它,相较于传统的要先出Word接口文档再测试的方式,显然这样也更符合现在的快速迭代开发行情。当然了,提醒下大家在正式环境要记得关闭Swagger,一方面出于安全考虑,另一方面也可以节省运行时内存。

相较于传统的Postman或Curl方式测试接口,使用swagger简直就是傻瓜式操作,不需要额外说明文档(写得好本身就是文档)而且更不容易出错,只需要录入数据然后点击Execute,如果再配合自动化框架,可以说基本就不需要人为操作了。

Swagger号称世界上最流行的API框架

Restful Api 文档在线自动生成器 => API 文档 与API 定义同步更新

直接运行,在线测试API

支持多种语言 (如:Java,PHP等)

官网:https://swagger.io/

二、Springboot集成Swagger

1. Springfor—jar包

SpringBoot集成Swagger => springfox,需要两个jar包

  • Springfox-swagger2

  • swagger-springmvc

2. 使用Swagger一般步骤

要求:jdk 1.8 + 否则swagger2无法运行

步骤:

1、准备好一个SpringBoot项目

2、添加Maven依赖

<!-- 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>

3、编写SwaggerConfig配置Swagger

 在config文件夹下新建 SwaggerConfig.java 文件,配置Swagger

@Configuration //配置类
@EnableSwagger2// 开启Swagger2的自动配置
public class SwaggerConfig {  
}

4、访问测试 

启动项目,输入http://ip地址:端口号/swagger-ui.html

默认是:http://localhost:8080/swagger-ui.html ,可以看到swagger的界面。

3. 配置Swagger

1、配置Docket实例

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

@Bean //配置docket以配置Swagger具体参数
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2);
}

2、通过apiInfo()属性配置文档信息

//配置文档信息
private ApiInfo apiInfo() {
   Contact contact = new Contact("联系人名字", "http://xxx.xxx.com/联系人访问链接", "联系人邮箱");
   return new ApiInfo(
           "Swagger学习", // 标题
           "学习演示如何配置Swagger", // 描述
           "v1.0", // 版本
           "http://terms.service.url/组织链接", // 组织链接
           contact, // 联系人信息
           "Apach 2.0 许可", // 许可
           "许可链接", // 许可连接
           new ArrayList<>()// 扩展
  );
}

3、Docket实例关联上apiInfo()

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

4. 配置扫描接口

1、构建Docket时通过select()方法配置扫描接口

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.ljh.controller"))
      .build();
}

除了通过包路径配置扫描接口外,还可以通过配置其他方式扫描接口,这里注释一下所有的配置方式:

any() // 扫描所有,项目中的所有接口都会被扫描到
none() // 不扫描接口
// 通过方法上的注解扫描,如withMethodAnnotation(GetMapping.class)只扫描get请求
withMethodAnnotation(final Class<? extends Annotation> annotation)
// 通过类上的注解扫描,如.withClassAnnotation(Controller.class)只扫描有controller注解的类中的接口
withClassAnnotation(final Class<? extends Annotation> annotation)
basePackage(final String basePackage) // 根据包路径扫描接口

2、可以选择配置接口扫描过滤

.paths(PathSelectors.ant("/ljh/**"))

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.ljh.controller"))
       // 配置如何通过path过滤,即这里只扫描请求以/ljh开头的接口
      .paths(PathSelectors.ant("/ljh/**"))
      .build();
}

其它可选值:

any() // 任何请求都扫描
none() // 任何请求都不扫描
regex(final String pathRegex) // 通过正则表达式控制
ant(final String antPattern) // 通过ant()控制

5. 配置Swagger开关

1、通过enable()方法配置是否启用Swagger

通过enable()方法配置是否启用swagger,如果是false,swagger将不能在浏览器中访问了。

@Bean
public Docket docket() {
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .enable(false) //配置是否启用Swagger,如果是false,在浏览器将无法访问
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.ljh.controller"))
       // 配置如何通过path过滤,即这里只扫描请求以/ljh开头的接口
      .paths(PathSelectors.ant("/ljh/**"))
      .build();
}

2、动态配置项目处于开发环境显示Swagger

动态配置当项目处于开发环境(dev)或者test时显示swagger,处于生产环境(prod)时不显示。

@Bean
public Docket docket(Environment environment) {
   // 设置要显示swagger的环境
   Profiles of = Profiles.of("dev", "test");
   // 判断当前是否处于该环境
   // 通过 enable() 接收此参数判断是否要显示
   boolean b = environment.acceptsProfiles(of);
   
   return new Docket(DocumentationType.SWAGGER_2)
      .apiInfo(apiInfo())
      .enable(b) //配置是否启用Swagger,如果是false,在浏览器将无法访问
      .select()// 通过.select()方法,去配置扫描接口,RequestHandlerSelectors配置如何扫描接口
      .apis(RequestHandlerSelectors.basePackage("com.ljh.controller"))
       // 配置如何通过path过滤,即这里只扫描请求以/ljh开头的接口
      .paths(PathSelectors.ant("/ljh/**"))
      .build();
}

3、在项目中增加一个dev的配置文件设置开发环境

application-dev.yml

spring:
  profiles:
    active: dev

不是开发环境时访问swagger界面则为:

6. 配置API分组

1、通过groupName()方法配置分组

如果没有配置分组,默认是default。

@Bean
public Docket docket(Environment environment) {
   return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
      .groupName("hello") // 配置分组
       // 省略配置....
}

2、配置多个分组

配置多个分组只需要配置多个docket即可。

@Bean
public Docket docket1(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group1");
}
@Bean
public Docket docket2(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group2");
}
@Bean
public Docket docket3(){
   return new Docket(DocumentationType.SWAGGER_2).groupName("group3");
}

3、启动项目查看swagger界面

7. 实体类配置

1、给实体类加中文注释

类名、字段名都可以利用注解进行注释,不注释的话swagger界面中你的moudle里面默认是类名

@ApiModel为类添加注释

@ApiModelProperty为类属性添加注释

注:并不是因为@ApiModel这个注解让实体显示在这里了,而是只要出现在接口方法的返回值上的实体都会显示在这里,而@ApiModel和@ApiModelProperty这两个注解只是为实体添加注释的。

2、启动项目查看swagger界面的moudle模块 

三、Swagger接口测试

1. 以登录接口为例

点击“Try it out”,输入对应参数,点击 Execute 执行。

2. 登录成功

3. 登陆失败

 

四、常用注解

1. Swagge注解

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

下面列一些经常用到的:

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

2. 给请求的接口配置注释

@ApiOperation("冷风的接口")
@PostMapping("/ljh")
@ResponseBody
public String kuang(@ApiParam("这个名字会被返回")String username){
   return username;
}

通常我们可以给一些比较难理解的属性或者接口,增加一些配置信息,让人更容易阅读。

五、Swagger其它jar包界面皮肤

我们可以导入不同的包实现不同的皮肤定义:

1.springfox

访问地址: http://localhost:8080/swagger-ui.html

<dependency>
   <groupId>io.springfox</groupId>
   <artifactId>springfox-swagger-ui</artifactId>
   <version>2.9.2</version>
</dependency>

2. bootstrap-ui  

访问地址:http://localhost:8080/doc.html

<!-- 引入swagger-bootstrap-ui包 /doc.html-->
<dependency>
   <groupId>com.github.xiaoymin</groupId>
   <artifactId>swagger-bootstrap-ui</artifactId>
   <version>1.9.1</version>
</dependency>

3. Layui-ui 

访问地址:http://localhost:8080/docs.html

<!-- 引入swagger-ui-layer包 /docs.html-->
<dependency>
   <groupId>com.github.caspar-chen</groupId>
   <artifactId>swagger-ui-layer</artifactId>
   <version>1.1.3</version>
</dependency>

4. mg-ui  

访问地址:http://localhost:8080/document.html

<!-- 引入swagger-ui-layer包 /document.html-->
<dependency>
   <groupId>com.zyplayer</groupId>
   <artifactId>swagger-mg-ui</artifactId>
   <version>1.0.6</version>
</dependency>

 六、本人常用的Swagger配置文件

pom.xml

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

SwaggerConfig.java

package com.teachersystem.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.core.env.Profiles;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;

@Configuration
@EnableSwagger2  //开启swagger2
public class SwaggerConfig {

    //配置了Swagger的Docket的bean实例


    @Bean
    public Docket docket(Environment environment) {

        Profiles profiles = Profiles.of("dev");
        boolean isDev = environment.acceptsProfiles(profiles);
        ParameterBuilder tokenPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<>();
        tokenPar.name("Authorization")
                .description("令牌")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false).build();
        pars.add(tokenPar.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiinfo())
                .groupName("ljh")
                //是否启动swagger
                .enable(isDev)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.teachersystem.controller"))
                .build()
                .globalOperationParameters(pars);
    }

    //配置swagger信息=apiinfo
    private ApiInfo apiinfo() {
        //作者信息
        Contact contact = new Contact("ljh", "https://blog.csdn.net/weixin_50241387?spm=1011.2415.3001.5343", "1111111111@qq.com");
        return new ApiInfo(
                "班主任工作管理系统的API文档",
                "做吧做吧",
                "v1.0",
                "https://blog.csdn.net/weixin_50241387?spm=1011.2415.3001.5343",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>()
        );
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值