首页 > 其他分享 >Swagger配置详解

Swagger配置详解

时间:2023-03-31 11:47:53浏览次数:45  
标签:apiInfo 配置 接口 ApiInfo new Swagger Docket 详解

Swagger配置详解

Swagger

一、Swagger简介

1.1、前后端发展过程

  1. 后端时代:前端只管理静态页面 html ;后端则是主力,会使用模板引擎JSP
  2. 前后端分离时代:
  • 后端负责:后端控制层,服务层,数据访问层
  • 前端负责:前端控制层(vue),视图层
    • 前端可以伪造后端数据,无需后端,前端页面依旧可以运行
  • 前后端交互:API;前端页面调用API获取后台数据,后台提供接口,按需求提供数据
    • 这样前后端相对独立。松耦合
    • 前后端可以部署在不同的服务器上

1.2、前后端分离产生的问题及解决

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

解决方案:

  • 首先指定schema(计划提纲),实时更新API,降低集成风险
  • 早年制定 word 计划文档
  • 前后端分离:
    • 前端测试后端接口:postman
    • 后端提供接口,需要实时更新最新的消息及改动

1.3、世界上最流行的API框架:Swagger

Swagger的优势:

  • 是 RestFul API 文档在线自动生成工具:API文档与API定义同步更新
  • 直接运行,可以在线测试API接口
  • 支持多种语言:(java、Php......)

Swagger官网:https://swagger.io/

Swagger依赖:

  • swagger2
  • UI

二、SpringBoot集成Swagger

2.1、新建SpringBoot-web项目

2.2、导入依赖

  • 进入Maven依赖:https://mvnrepository.com
  • 搜索:springfox-swag
    • 前两个依赖分别为 swagger2 和 UI
  • 导入依赖
<!-- swagger2依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<!-- ui依赖 -->
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

2.3、编写一个接口

接口概念:这个接口和 interface 不同,是网络接口,前端通过此接口输入信息,获取数据。因此此接口都有对应的网络地址,有 @RequestMapping

 @RequestMapping("/getAllTeacher")
    @ResponseBody
    public List<Staff> getAllTeacher(){
        List<Staff> list = ss.getAllTeacher();
        return list;
    }

2.4、配置Swagger

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

2.5、运行测试

三、配置Swagger

3.1、swagger的bean实例为:Docket

public class Docket implements DocumentationPlugin {
    
    //Docket中有一个 ApiInfo 的属性,用来设置Info信息
    private ApiInfo apiInfo = ApiInfo.DEFAULT;
    
    //对应设置 ApiInfo 的方法
    public Docket apiInfo(ApiInfo apiInfo) {
    this.apiInfo = defaultIfAbsent(apiInfo, apiInfo);
    return this;
  }
    
}

3.2、接口信息设置:ApiInfo

public class ApiInfo {
    
    //ApiInfo设置了默认的 ApiInfo 值
    public static final ApiInfo DEFAULT = new ApiInfo(
        //title:标题
        "Api Documentation",
        //description:API描述
        "Api Documentation", 
        //version:版本
        "1.0", 
        "urn:tos",
        //作者信息,是个引用数据类型,要自己new
          DEFAULT_CONTACT,
        "Apache 2.0", 
        "http://www.apache.org/licenses/LICENSE-2.0", 
        new ArrayList<VendorExtension>());
}

3.2、配置swagger页面的信息

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    //配置了Swagger的Docter的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());
    }

    private ApiInfo apiInfo(){

        //作者信息
        Contact contact = new Contact("java大数据班","","[email protected]");

        return new ApiInfo(
                "第三阶段项目",
                "SpringBoot综合练习",
                "1.0",
                "urn:tos",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
}

再次启动运行后,swagger页面的默认配置信息被我们自己写的替代

img

四、swagger配置扫描接口及分组

4.1、swagger配置扫描接口

生成Docket对象时,设置生成API,方法为:

  • .select() .apis(RequestHandlerselector.配置方式) .build()

  • apis()内部的 RequestHandlerselectors,配置要扫描接口的方式

    • basePackage("包名"):指定要扫描的包指定扫描方式

    • any():扫描全部

    • none( ):不扫描

    • withclassAnnotation:扫描类上的注解,参数是一个注解的反射对象

    • withMethodAnnotation:扫描方法上的注解

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    //配置了Swagger的Docter的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //选择接口
                .select()
                //选择接口
                .apis(RequestHandlerSelectors.basePackage("com.hxzy.course.controller"))
                //build()一般表示工厂设计模式
                .build();
    }

    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("梁鑫","","[email protected]");
        return new ApiInfo(
                "第三阶段项目",
                "SpringBoot综合练习",
                "1.0",
                "urn:tos",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
}

4.2、swagger配置分组

分组步骤:

  • 创建不同的 Docket 对象
  • 使用groupName(组名)方法为不同的Docket组别命名
@Configuration
@EnableSwagger2
public class SwaggerConfig {
    //配置了Swagger的Docter的bean实例
    @Bean
    public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2)
                //为分组命名
                .groupName("梁鑫")
                .apiInfo(apiInfo1())
                //选择接口
                .select()
                //选择接口
                .apis(RequestHandlerSelectors.basePackage("com.hxzy.course.controller"))
                //build()一般表示工厂设计模式
                .build();
    }
    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2)
                .groupName("贺景深")
                .apiInfo(apiInfo2())
                //选择接口
                .select()
                //选择接口
                .apis(RequestHandlerSelectors.basePackage("com.hxzy.booking.controller"))
                //build()一般表示工厂设计模式
                .build();
    }
    private ApiInfo apiInfo1(){
        //作者信息
        Contact contact = new Contact("梁鑫","","[email protected]");
        return new ApiInfo(
                "第三阶段项目",
                "SpringBoot综合练习",
                "1.0",
                "urn:tos",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
    private ApiInfo apiInfo2(){
        //作者信息
        Contact contact = new Contact("贺景深","","[email protected]");
        return new ApiInfo(
                "第三阶段项目",
                "SpringBoot综合练习",
                "1.0",
                "urn:tos",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList<>());
    }
}

img

4.3、swagger配置是否启动Docket

.enable():方法

  • .enable(true) 表示启动Docket,默认就是true
  • .enable(false)表示不启动Docket
public Docket docket1(){
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(false)
                //为分组命名
                .groupName("梁鑫")
                .apiInfo(apiInfo1())
                //选择接口
                .select()
                //选择接口
                .apis(RequestHandlerSelectors.basePackage("com.hxzy.course.controller"))
                //build()一般表示工厂设计模式
                .build();
    }

标签:apiInfo,配置,接口,ApiInfo,new,Swagger,Docket,详解
From: https://www.cnblogs.com/little-monster-lhq/p/17275785.html

相关文章

  • mysql,pg连接重试参数配置
    PostgreSQLJDBCURL连接重试的示例:StringdbUrl="jdbc:postgresql://localhost:5432/mydb?autoReconnect=true&maxReconnects=5&connectTimeout=5000";Connectionconnection=null;try{connection=DriverManager.getConnection(dbUrl,"user......
  • Windows下Nginx安装与配置教程
    一、前言1、Nginx是什么?Nginx是一个开源的Web服务器,同时Nginx也提供了反向代理和负载均衡的功能。Nginx通常作为负载均衡器暴露在外网接受用户请求,同时也使用其反向代理的功能,将用户的请求转发到实际提供服务的内网服务器。2、Windows什么情况下需要Nginx?通常来说Windows下IIS......
  • Linux系统下NFS服务器的配置(实训)
    实训目的:掌握Linux系统中NFS服务的安装,启动与停止;掌握exports配置文件的操作;掌握用expoets命令测试NFS服务器的方法。实训环境:网络环境中装有CentOS7操作系统的计算机。实训步骤:第1步:NFS规划。1)将本地文件系统的/home/mp3目录共享,mary客户机对该目录具有读写限权,其他所有用......
  • PHP 配置的详细记录
    PHP配置的详细记录一、php配置的目的让PHP的php-fpm(PHPFastCGI管理器)程序能更好地与nginx服务器的进行通信二、进行php配置1.php配置文件位置2.查看是否有php配置文件$cd/usr/local/php8.1/etc --进入文件夹$ls --查看文件夹里的内容php.ini --就是php的配置文......
  • Linux配置免密登陆
    A机器免密登陆B机器[root@ServerA~]#ssh-copy-idServerB/usr/bin/ssh-copy-id:INFO:Sourceofkey(s)tobeinstalled:"/root/.ssh/id_rsa.pub"/usr/bin/ssh-copy-id:INFO:attemptingtologinwiththenewkey(s),tofilteroutanythatarealreadyinsta......
  • 详解面向切面AOP
    AOP再看AOP,这是一种面向切面编程思想,相比面向对象编程,可以说是站在更改维度关注对象,我们知道,对象包含由属性和行为。基于AOP,我们可以把一段代码插入到对象中形成新的对象,这是织入的过程,目的是将公共的内容写入到业务代码中,通过配置或简单的编码完成整个过程。这样一来不用修改......
  • odoo 16 安装配置
    一、准备Ubuntu操作系统安装Ubuntu20.044GB内存硬盘300GBIP:10.0.0.81加载光盘映像文件后启动虚拟机语言和键盘保持默认的U.S.English设置IP地址:手动10.0.0.81设置镜像库:http://mirrors.aliyun.com/ubuntu等待系统安装完成后,退出光盘映像文件,然后重启......
  • Surge for Mac配置本地代理监听端口
    1setting-general  2advancedproxyservicesettings  3这里修改代理监听的端口  4不同的网站和不同的app都代理的话,需要根据监听协议修改跟surge的监听协议和端口一致,就可以通过代理来访问了,比如chrome的代理插件switchyOmega ......
  • vue3+vite+ts 配置@时vscode报找不到__dirname的问题
    vue3+vite+ts配置@时vscode报找不到__dirname的问题-CSDN博客  原因:path模块是node.js的内置模块,而node.js默认不支持ts文件的解决:安装@type/node依赖包 npminstall@types/node--save-dev......
  • node express自动生成swagger(openApi)接口文档
    先看效果图:   实现步骤:1.安装所需的包npminstallswagger-jsdocswagger-ui-express2.新建文件swagger.js//swagger在线网站:https://editor.swagger.io/#constswaggerJSDoc=require('swagger-jsdoc')constswaggerUi=require('swagger-ui-express')......