Swagger初学习笔记

Posted 小智RE0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swagger初学习笔记相关的知识,希望对你有一定的参考价值。

学习来源 B站:狂神说:【狂神说Java】一小时掌握Swagger技术

文章目录


1.概念 & 在springboot中初步集成Swagger


Swagger :

  • 最好的APi开源框架;支持多种语言,且可以在线测试接口;
  • 仅需按照规范定义接口以及相关信息; 注意这里所说的接口就是前后端交流时的接口;
  • 在开发新版本或者迭代版本的时候,只需更新Swagger描述文件,即可自动生成接口文档和客户端服务端代码,做到调用端代码、服务端代码以及接口文档的一致性。

官网地址: https://swagger.io/

导入依赖,集成

<!--集成swagger-->
<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>

当然还需要在yml配置文件中进行配置;

spring:
	mvc:
      pathmatch:
        matching-strategy: ANT_PATH_MATCHER

写个配置类简单试试;
注意重要注解@EnableSwagger2 开启swagger2;
这里的注解@Configuration不陌生了,就是标注当前类作为配置类;

@Configuration
@EnableSwagger2
public class SwaggerConfig 


访问http://localhost:5277/swagger-ui.html;(注意我这里的本地当前后端服务端口设为了5277);
这个查看效果确实很方便呢

为啥要访问这个页面?
在引用的swagger-ui中就有这个供访问的页面


2.基本配置学习


比如说基本的自定义信息;

配置Docket摘要对象,描述信息;

首先配置自定义文件描述信息ApiInfo
在自定义的类中

@Configuration
@EnableSwagger2
public class SwaggerConfig 

    //配置Docket的bean实例;
    @Bean
    public Docket myDocket()
        return new Docket(DocumentationType.SPRING_WEB)
                .apiInfo(myApi());
    

    //可自定义配置swagger信息;
    public ApiInfo myApi()
        //作者信息;
        Contact contact = new Contact("小智RE0","https://blog.csdn.net/MrTumnus","我的邮箱");

        return new ApiInfo(
                "这是API文档的标题",
                "这是我API文档的描述",
                "1.0",
                //组织链接;
                "http://localhost:8080/#/login",
                 //作者信息;
                 contact,
                "Apache 2.0",
                "https://www.bilibili.com/video/BV1Y441197Lw?p=2",
                new ArrayList());
    

运行;可看到配置已生效

配置指定的扫描接口;
我们可看到它默认扫描了控制层的所有请求接口,扫描了所有的model实体类;
那么,怎么自定义设置呢?

比如我配置基本的扫描包

那么这里就会非常清晰的显示到控制层包下的两个类;

其他配置,比如配置扫描全部: any(); 配置什么都不扫描: none() ;
扫描类上的指定注解:withClassAnnotation;
扫描方法上的指定注解:withMethodAnnotation;

可使用paths()配置指定的过滤规则;

@Configuration
@EnableSwagger2
public class SwaggerConfig 

    //配置Docket的bean实例;
    @Bean
    public Docket myDocket()
        return new Docket(DocumentationType.SPRING_WEB)
                .apiInfo(myApi())
                .select()
                //注意这里可用 requestHandler 接口的实现类:RequestHandlerSelectors;配置扫描接口的方式;
                //首先配置指定的扫描包:basePackage()
                //.apis(RequestHandlerSelectors.basePackage("com.xiaozhi.backserver.startspringboot.controller"))
                //配置扫描全部: any()
                //.apis(RequestHandlerSelectors.any())
                //配置什么都不扫描: none()
                //.apis(RequestHandlerSelectors.none())
                //扫描类上的指定注解:withClassAnnotation
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                //扫描方法上的指定注解:withMethodAnnotation
                .apis(RequestHandlerSelectors.withMethodAnnotation(PostMapping.class))
                //配置过滤指定的路径:paths
                .paths(PathSelectors.ant("/api/admin/**"))
                .build();
    

    //可自定义配置swagger信息;
    public ApiInfo myApi()
        //作者信息;
        Contact contact = new Contact("小智RE0","https://blog.csdn.net/MrTumnus","我的邮箱");

        return new ApiInfo(
                "这是API文档的标题",
                "这是我API文档的描述",
                "1.0",
                //组织链接;
                "http://localhost:8080/#/login",
                 //作者信息;
                 contact,
                "Apache 2.0",
                "https://www.bilibili.com/video/BV1Y441197Lw?p=2",
                new ArrayList());
    

运行后

可配置是否自动启动;在Docket对象初始化时enabled属性默认为true;

`
配置试试

运行启动后;


那么如何配置swagger在生产环境中生效,实际发布时不生效呢?

  • 首先判断是不是生产环境;
  • 比如说使用一个标记值 flag;
  • 然后将flag传入到 enable(flag)中作为方法参数;来达到是否生效的效果;

在这里插入图片描述


启动;
访问http://localhost:5277/dev/swagger-ui.html#/

但是没有启动的测试环境,无法访问;


3.配置APi文档的分组,接口注释…


在自定义创建Docket对象时;使用groupName("组名")方法来定义分组的名称;
比如说定义不同的Docket对象 ;定义不同的分组名称;

启动后,可以注意到这里可以查看不同的组


关于实体Model类配置;
注意:只要在接口的返回值中包含了实体类,那么该实体类就会被扫描到;
比如这里登录时返回了Admin类

那么该类就被扫描到了;

还可以给实体类加文档注释;
在实体类上使用注解@ApiModel("文档注释");注释类信息;
可在属性上使用@ApiModelProperty("注释")在说明属性;

可在控制类处使用@Api(tags = "登录控制层") 标注当前的控制类;
方法处使用@ApiOperation("注释")标注当前接口注释;
可在方法参数使用@ApiParam(" ") 标注当前的方法参数含义;


以上是关于Swagger初学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot学习笔记:集成swagger2

Swagger的学习

开源 - 学习笔记 - 青阳网络文件传输系统初体验

LVGL学习笔记 | 01 - LVGL PC模拟器初体验

开源 - 学习笔记 - 青阳网络文件传输系统初体验

Spring Boot学习进阶笔记-初体验,创建基本的web功能