Swagger简介及Springboot集成Swagger详细教程

news2024/9/24 23:26:57

Swagger简介及Springboot集成Swagger详细教程

学习目标

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

1、Swagger简介

前后端分离

Vue+SpringBoot

后端时代

前端只用管理静态页面;html–>后端。模版引擎JSP–>后端是主力

前后端分离式时代

  • 后端:后端控制层,服务层,数据访问层【后端团队】
  • 前端:前端控制层,视图层【前端团队】
  • 前后端如何交互?===>API
  • 前后端相对独立,松耦合
  • 前后端甚至可以部署在不同的服务器上

产生一个问题:

  • 前后端集成联调,前段人员和后端人员无法做到“即使协商,尽早解决”,最终导致问题集中爆发;
  • 首先指定schema[计划的提纲],实时更新最新API,降低集成的风险
  • 前后端分离:
    1. 前后端测试后端接口:postman
    2. 后端提供接口,需要实时更新最新的消息以及改动

2、Swagger应运而生

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

在项目中使用Swagger

  • Swagger2
  • Swagger-ui

3、SpringBoot集成Swagger

1、新建一个SpringBoot-web项目

注意Project SDKJava的版本选择即可
在这里插入图片描述

2、导入相关依赖

<!-- swagger2 依赖 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>
        <!-- Swagger第三方ui依赖 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

3、编写一个Hello工程

@RestController
public class HelloController {

    @GetMapping(value = "/hello")
    public String hello(){
        return "Hello";
    }
}

4、集成Swagger

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

去访问

http://localhost:8084/swagger-ui.html

在这里插入图片描述

5、配置Swagger

Swagger的bean实例Docket

//配置了Swagger信息=apiInfo
    private ApiInfo apiInfo(){
        //作者信息
        Contact contact = new Contact("不写八个","http://localhost:8084/doc.html","wangliukun0306@163.com");
        return new ApiInfo(
                "【不写八个】的SwaggerAPI文档",
                "即使再小的帆也能远航",
                "v1.0",
                "http://localhost:8084/doc.html",
                contact,
                "Apache 2.0",
                "http://www.apache.org/licenses/LICENSE-2.0",
                new ArrayList());
    }

加入到实例中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2p0m1Cfz-1688953536629)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230710094440372.png)]

6、Swagger配置扫描接口

//配置了Swagger的Docket的bean实例
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                //控制是否开启swagger,false则swagger不能在浏览器中访问
                //.enable(false)
                .select()
                //RequestHandlerSelectors.basePackage 配置要扫描的接口
                //RequestHandlerSelectors.any() 扫描全部
                //RequestHandlerSelectors.none() 不扫描
                //RequestHandlerSelectors.withClassAnnotation() 扫描类上的注解
                //RequestHandlerSelectors.withMethodAnnotation() 扫描方法上的注解
                .apis(RequestHandlerSelectors.basePackage("com.wang.swagger.controller"))
                //过滤的路径
                //.paths(PathSelectors.ant("/wang/**"))
                .build();
    }

问题:我只希望swagger在生产环境中使用,在发布的时候不使用

7、配置swagger api文档分组

.groupName(“不写八个”)

配置多个分组

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

    @Bean
    public Docket docket2(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("程序员B");
    }

    @Bean
    public Docket docket3(){
        return new Docket(DocumentationType.SWAGGER_2).groupName("程序员C");
    }

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7aImLtl-1688953536629)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230710094509322.png)]

4、 总结

  1. 我们可以通过Swagger给一些比较难理解的属性或者接口,增加注释信息
  2. 接口文档实时更新
  3. 可以在线测试
  4. Swagger是一个优秀的工具,几乎所有的大公司都有使用它
  5. 出于安全考虑,发布的时候,关闭Swagger

5、完整项目代码

链接:https://pan.baidu.com/s/191ri_lLzAULNywehbZioZA 
提取码:3535 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/738970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

获取mysql存储过程的异常信息

示例 CREATE DEFINERrootlocalhost PROCEDURE getErrorMsg() BEGIN-- 定义存储变量DECLARE code CHAR(5) DEFAULT ;DECLARE msg TEXT;DECLARE result TEXT;-- 声明异常处理DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONBEGIN-- 获取异常code,异常信息GET DIAGNOSTICS CONDITION …

基于单片机的恒温恒湿温室大棚温湿度控制系统的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;液晶显示当前温湿度按键设置温湿度报警上限和下限&#xff1b;温度低于下限继电器闭合加热片进行加热&#xff1b;温度超过上限继电器闭合开启风扇进行降温湿度低于下限继电器闭合加湿器进行加湿湿度高于上限继电器闭合开启风扇进行…

干翻Dubbo系列第三篇:Dubbo术语与第一个应用程序

前言 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#xff0c;这人便为有福&#xff01;他要像一棵树栽在溪水旁&#xff0c;按时候结果子&#xff0c;叶子也不枯干。凡他所做的尽都顺利。 如…

小程序页面顶部标题栏、导航栏navigationBar如何隐藏、变透明?

在app.json中的 "window"下面追加一行 "navigationStyle": "custom" 小程序顶部的白色背景条就不见了&#xff0c;直接变透明&#xff0c;只剩下右上角的胶囊按钮 警告&#xff1a; 如果页面有 <web-view src"{{src}}" /> …

机器学习实战 | MNIST手写数字分类项目(深度学习初级)

目录 简介技术流程1. 载入依赖包和数据集2. 数据预处理3. 创建卷积神经网络模型4. 训练神经网络5. 评价网络 完整程序train.py 程序gui.py程序 简介 准备写个系列博客介绍机器学习实战中的部分公开项目。首先从初级项目开始。 本文为初级项目第二篇&#xff1a;利用MNIST数据集…

111、基于51单片机的电磁感应无线充电系统 手机无线充电器设计(程序+原理图+Proteus仿真+程序流程图+论文参考资料等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

在SpringBoot中对微服务项目的简单使用

准备数据库的数据 create database leq_sc; CREATE TABLE if not exists products(id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50), #商品名称 price DOUBLE,flag VARCHAR(2), #上架状态 goods_desc VARCHAR(100), #商品描述images VARCHAR(400), #商品图?goods_stock I…

[工业互联-21]:常见EtherCAT主站方案:Kithara实时套件

第1章 Kithara实时套件概述 1.1 概述 Kithara Software是一家德国的软件公司&#xff0c;专注于实时技术和嵌入式解决方案。 他们为Windows操作系统提供了Kithara RealTime Suite&#xff0c;这是一套实时扩展模块&#xff0c;使Windows能够实现硬实时任务和控制。 Kithara…

菜比:你还不会接口测试?

很多人会谈论接口测试。到底什么是接口测试&#xff1f;如何进行接口测试&#xff1f;这篇文章会帮到你。 一、前端和后端 在谈论接口测试之前&#xff0c;让我们先明确前端和后端这两个概念。 前端是我们在网页或移动应用程序中看到的页面&#xff0c;它由 HTML 和 CSS 编写…

QT - 20230710

练习&#xff1a;实现一个简易闹钟 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDateTime> #include <QDebug> #include <QTextToSpeech>namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpubl…

Kafka入门, Kafka-Kraft 模式 部署(二十六)

Kafka-Kraft 模式 左图为kafka现有架构&#xff0c;元数据在zookeeper中&#xff0c;运行时动态选举controller,由controller进行kafka集群管理&#xff0c;右图为kraft模式架构&#xff08;实验性&#xff09;&#xff0c;不再依赖zookeeper集群&#xff0c;而是用三台control…

MyBatis将查询的两个字段分别作为Map的key和value

问题背景 首先查出 危险源id 和 危险源报警的个数 alarm 遍历危险源&#xff0c;将报警数填充进去 所以&#xff0c;我需要根据id得到alarm 最方便的就是Map 经过sql查询 -- 危险源下的对象的报警个数select id, ifnull(alarm_count,0) alarm from spang_monitor_danger_…

LongLLaMA:LLaMA的升级版,处理超长上下文的利器!

原文来源&#xff1a;芝士AI吃鱼 有效整合新知识&#xff1a;大模型面临的挑战 大家使用过大型模型产品的时候可能会遇到一个共同的问题&#xff1a;在进行多轮对话时&#xff0c;模型可能会忘记之前的对话内容&#xff0c;导致回答不连贯。这实际上是由于大型模型在处理大量新…

ARM day10 (IIC协议接收温湿传感器数据)

iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{…

c++实现贝塞尔曲线,生成缓动和回弹动画

贝塞尔曲线于1962年由法国工程师皮埃尔贝塞尔(Pierre Bzier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。 一般参数公式 贝兹曲线可如下推断。给定点P0、P1、…、Pn,其贝兹曲线即: 几何学的方向上理解贝塞尔曲线: 一阶贝塞尔曲线 二阶贝塞尔曲线 三阶贝塞尔曲…

记录使用注入的方式为Unity编辑器实现扩展能力

使用场景 当前项目编辑器中不方便存放或者提交扩展代码相同的扩展功能需要在多个项目(编辑器)中使用项目开发中&#xff0c;偶尔临时需要使用一个功能&#xff0c;想随时使用随时卸载 设计思路 使用进程注入&#xff0c;将一个c/c dll注入到当前运行的unity编辑器中使用c/c …

分布式搜索 (二)

一、DSL 查询文档 1. DSL Query 的分类 Elasticsearch 提供了基于 JSON 的 DSL (Domain Specific Language) 来定义查询 常见的查询类型包括&#xff1a; ① 查询所有&#xff1a;查询出所有数据&#xff0c;一般测 试用 例如&#xff1a;match_all ② 全文检索 (full text) …

C++数据结构笔记(8)循环链表实现

1.循环链表与单链表的区别在于尾部结点存在指向头结点的指针 2.无论尾部结点指向第一个结点&#xff08;头结点&#xff09;还是第二个结点&#xff08;第一个有效结点&#xff09;&#xff0c;都可以被称为循环链表 3.判断循环结束的两种方式&#xff1a;遍历次数等于size;或…

《深度探索c++对象模型》笔记

非原创&#xff0c;在学习 1 关于对象&#xff08;Object Lessons&#xff09; 这里最开始从C语言的结构体引出C中的”抽象数据类型&#xff08;ADT&#xff09;“。 而加上封装之后&#xff0c;布局成本没有增加&#xff0c;三个data member直接内含在每一个class object之中…

深入选择屏幕

2.3.4.4 屏幕输入报表筛选条件等 &--------------------------------------------------------------------- *& selection-screen /option/parameter:屏幕输入报表赛选条件 *& TABLES . *selection-screen begin of block test select-options: selection-screen…