首页 > 其他分享 >【学习笔记】Swagger

【学习笔记】Swagger

时间:2023-01-26 21:57:54浏览次数:58  
标签:Swagger 扫描 笔记 学习 API springfox Docket public

Swagger

1. 学习目标

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

2. Swagger简介

前后端分离

  • 后端:后端控制层、服务层、数据访问层
  • 前端:前端控制层、视图层
    • 伪造后端数据,json格式。作为测试数据,因此不需要后端前端工程也能跑起来,并且数据对应着数据库的各个表和各个字段。前后端接轨时只需要把从本地获取的这些数据换成从后端提供的接口获取就可以
  • 前后端交互:API
  • 前后端相对独立,彼此松散耦合,甚至可以部署在不同的服务器上
  • 问题:前后端集成联调的协商
  • 解决方案
    • 首先指定一个schema,实时更新最新的API,降低集成风险

Swagger

  • 号称世界上最流行的API框架
  • RestFul Api文档在线自动生成工具=>Api文档与Api定义同步更新
  • 直接运行,可以在线测试API接口
  • 支持多种语言:Java、PHP...

官网:链接

3. Springboot集成Swagger

  1. 新建一个springboot项目

  2. 导入两个依赖:springfox-swagger2、springfox-swagger-ui

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>3.0.0</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>3.0.0</version>
    </dependency>
    
  3. 集成Swagger

    创建配置类SwaggerConfig,添加注解

    @Configuration
    @EnableSwagger2			//开启swagger2
    public class SwaggerConfig { }
    
  4. 测试运行:http://localhost:8080/swagger-ui.html

    启动时报空指针异常:Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException

    解决方案:解决方案之‘Failed to start bean ‘documentationPluginsBootstrapper‘; nested exception is java.lang.NullPoi_技术宅星云的博客-CSDN博客

    如果是swagger3.0.0及更新的版本,由于静态文件位置发生了变化,无法通过上述地址进行访问。需要去掉上述引进的两个依赖,重新引进下面的依赖

    <!-- https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter -->
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    

    并在主程序启动类添加注解@EnableOpenApi

    之后通过http://localhost:8080/swagger-ui/index.html访问

4. Swagger扫描接口

配置类SwaggerConfig

扫描接口,在Docket的创建时添加下列配置

  • .select()
  • .apis(RequestHandlerSelectors.) ==> RequestHandlerSelectors用来配置扫描接口的方式
    • basePackage("···") ==> 指定要扫描的包
    • any() ==> 扫描全部
    • none() ==> 不扫描
    • withClassAnnotation() ==> 扫描类上的注解,参数是一个注解的反射对象
    • withMethodAnnotation() ==> 扫描方法上的注解
  • paths(PathSelectors.) ==> 过滤什么路径

配置要显示Swagger的环境

指定环境下才使Swagger可用

//配置要显示Swagger的环境,这里设置了dev和test环境下才开启Swagger
Profiles profiles = Profiles.of("dev","test");
//通过environment.acceptsProfiles判断是否处在自己设定的环境当中
boolean flag = environment.acceptsProfiles(profiles);

Swagger配置类代码

@Configuration
@EnableSwagger2
public class SwaggerConfig {
     // 配置基本信息
    @Bean
    public ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("Rodrigol的Swagger API文档")
                .description("仰天大笑出门去,我辈岂是蓬蒿人")
                .termsOfServiceUrl("http://47.115.222.44")
                .contact(new Contact("Rodrigol","https://blog.csdn.net/Lyao_Boker","[email protected]"))
                .version("1.0")
                .build();
    }
    //配置Swagger的Docket的Bean实例
    @Bean
    public Docket docket(Environment environment) {
        //配置要显示Swagger的环境,这里设置了dev和test环境下才开启Swagger
        Profiles profiles = Profiles.of("dev","test");
        //通过environment.acceptsProfiles判断是否处在自己设定的环境当中
        boolean flag = environment.acceptsProfiles(profiles);
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .enable(flag)   //enable是否启动Swagger,为False则不能在浏览器中访问Swagger
                .select()
                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
                .paths(PathSelectors.any())
                .build();
    }
}

5.配置API文档的分组

@Bean
public Docket docket() {
    return new Docket(DocumentationType.SWAGGER_2).groupName("A");
}

不同人开发不同的代码,然后各自创建一个自己的docket,扫描自己的对应的包

6. 实体类配置示例

创建实体类User

@ApiModel("用户实体类")
public class User {
    @ApiModelProperty("用户名")
    public String username;
    @ApiModelProperty("密码")
    public String password;
}

其中@ApiModel(),@ApiModelProperty()注解相当于Swagger文档上的实体类、实体类属性的注释

创建控制器UserController

@RestController
public class HelloController {
    @GetMapping(value = "/hello")		//get请求
    public String hello() { return "Hello Swagger"; }

    @PostMapping(value = "/user")		//post请求
    public User user() { return new User(); }

    @ApiOperation("halo方法")			  //Api接口功能注释
    @GetMapping(value = "/halo")
    public String halo(@ApiParam("用户名") String username) {	//@ApiParam()用于对参数的注释
        return "Halo Swagger" + username;
    }
}

标签:Swagger,扫描,笔记,学习,API,springfox,Docket,public
From: https://www.cnblogs.com/Rodrigo/p/17068281.html

相关文章

  • 根据swagger生成无侵入性的文档
    所需工具:1、swagger生成的json文件2、工具网站:https://editor.swagger.io/操作步骤:1、将swagger.json文件的内容粘贴到工具网站左侧。2、从上方的工具栏依次选择“Gen......
  • shell学习
    SHELL1统计文件的行数SHELL2打印文件的最后5行SHELL3监控CPU使用率shell1#!/bin/bashwc-la.txtshell2#!/bin/bashtail-n5a.txtshell3#!/bin/bash......
  • 网络流 学习笔记
    众所周知,网络流是一类常用于求解最优化问题的算法,有着灵活的性质与较为优秀的复杂度网络流学习的关键是对问题的抽象与建模,下面介绍一些常见的应用。二分图上的应用二分......
  • 10--限流技术学习 | 青训营笔记
    这是我参与「第五届青训营」伴学笔记创作活动的第10天简介所谓限流,就是指限制流量请求的频次。它主要是在高并发情况下,用于保护系统的一种策略,主要是避免在流量高峰导......
  • Linux笔记03: Linux常用命令_3.5权限管理命令
     3.5权限管理命令3.5.1权限介绍1.为什么需要权限绝大多数用户使用的是个人计算机,而使用个人计算机的用户一般都是被信任的用户(如家人、朋友等)。在这种情况下,大家都可......
  • 电工笔记 day1
          blog:师万物 本文是学习内容的简单回顾,希望对大家能有所帮助。 10A插座、16A插座380V/220V低压供配电电路的维修LC串联、并联电路PLC、变频器R......
  • 电工笔记 day2
          blog:师万物 本文是学习内容的简单回顾,希望对大家能有所帮助。 NPN型、PNP型三极管PN结倍率扁平封装变压器波形测试线、探头、接地夹插针网......
  • Markdown学习笔记
    Markdown语法标题#一级标题##二级标题###三级标题...以此类推字体**粗体***斜体****粗斜体***~~删除线~~引用>引用例:引用图片![图片名](图片地址)......
  • JavaScript学习笔记—包装类
    1.描述字符串本质就是一个字符数组"hello"-->["h","e","l","l","o"]2.属性和方法(1)length获取字符串的长度(2)字符串[index]获取指定位置的字符(3)at(index)......
  • Link-Cut Tree 学习笔记
    LinkCutTree是一种用来维护动态树问题的数据结构。其维护的是一个森林,森林中的每个树由若干个Splay组成,每个Splay代表树上的一条链,一个Splay的中序遍历就是那条......