swagger

学习视频链接:小狂神Springboot

每日格言

贵在坚持、难在坚持、成在坚持。

学习目标:

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

Swagger简介

故事还是要从前后端分离讲起啊

**前后端分离:**VUE+SpringBoot 基本上都用这一套

**后端时代:**前端只用管理静态页面,html===》后端,使用模版引擎 jsp=》后端主力

前后端分离时代

  • 后端:后端控制层,服务层,数据访问层【后端团队】
  • 前端:前端控制层,视图层,【前端团队】
    • 伪造后端数据,json,已经存在数据,不需要后端,前端工程依旧可以跑起来
  • 前后端如何交互 ====》API
  • 前后端相对独立,松耦合
  • 前后端甚至可以部署在不同的服务器上

产生一个问题:

  • 前后端联调,前端和后端人员无法做到及时协商,解决问题,导致问题爆发
  • 需要一个东西可以解决这个问题

解决问题:

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

官网:https://swagger.io/

Swagger

  • 号称世界上最流行的api框架
  • Restful Api文档在线自动生成工具==》api文档和api定义开发
  • 直接运行,可以在线测试api接口;
  • 执行多种语言(c#,java,php)

在项目中使用Swagger需要Springfox

  • swagger2
  • ui

SpringBoot集成Swagger

  1. 新建项目:SpringBoot-Swagger

  2. 导入相关依赖

    <!-- 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.0)的直接加入启动器

            <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version></dependency>
    
  3. 创建一个helloword的项目

  4. 配置Swagger==>就可以启动看看效果了 3.0版本后不需要在加入@enableopenapi,和@enableswagger2这两个注解,

    package com.hyc.springbootswagger.config;import org.springframework.context.annotation.Configuration;
    import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
    public class swaggerconfig {}

    路径:http://localhost:8080/swagger-ui/index.html

配置Swagger

配置呢,Swagger有自己的实例

我们使用docket来配置swagger的基本信息

@Beanpublic Docket docket(){return  new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo());}// 配置swagger基本信息private ApiInfo apiInfo(){Contact contact = new Contact("xxx", "hyc.com", "3132774018@qq.com");return new ApiInfo("XXX的swagger","签名","1.0","hyc.com",contact,"Apache 2.0","http://www.apache.org/licenses/LICENSE-2.0",new ArrayList());}

应为没有set方法所以我们只能用构造器,貌似,还有一个什么biuder可以使用,有机会去试试

swagger配置扫描接口

select()来设置扫描

扫描接口配置的方法:

apis:

  • RequestHandlerSelectors扫描接口的方式
  • basePackage指定扫描包
  • any()扫描全部
  • none()不扫描
  • withclassannotation 扫描类的注解(里面必须放注解的反射对象)

path:过滤哪里什么路径

  • paths(PathSelectors.ant("/hyc/**"))
 .select()
//指定我们需要基于什么包扫描.apis(RequestHandlerSelectors.basePackage("com.hyc.springbootswagger.controller")).build();

使用了自定义,那么swagger就不会去扫描其他的位置,会扫描你指定的这个报下的请求


可以发现,现在只有controller下的请求才会被扫描

是否开启Swagger

.enable(false)//eanble决定了是否启动swagger

如果为false那我们就无法进入swagger-ui/index.html了

如何让我在测试的时候用swagger,发布的时候不用swagger

environment.acceptsProfiles来判断是否处在环境中

  //配置swagger要使用的环境Profiles profiles = Profiles.of("dev", "test");

用profiles来配置使用环境

.enable(flag)//eanble判断是否启动swagger

api分组

分组,如何分组,

 .groupName("胡宇辰")

分组,如何多个分组?,我有多个docket就可以有多个.groupName

    @Beanpublic Docket docket(Environment environment){//配置swagger要使用的环境Profiles profiles = Profiles.of("dev", "test");//environment。acceptsProfiles判断自己是否在自己设定的环境中boolean flag = environment.acceptsProfiles(profiles);return  new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("胡宇辰").enable(flag)//eanble决定了是否启动swagger.select()//指定我们需要基于什么包扫描/*apis* RequestHandlerSelectors扫描接口的方式* basePackage指定扫描包* any()扫描全部* none()不扫描* withclassannotation 扫描类的注解(里面必须放注解的反射对象)**/.apis(RequestHandlerSelectors.basePackage("com.hyc.springbootswagger.controller"))/*path:过滤哪里什么路径** */
//                .paths(PathSelectors.ant("/hyc/**")).build();}@Beanpublic Docket docket1(Environment environment){return  new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("小刘");}@Beanpublic Docket docket2(Environment environment){return  new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).groupName("小郑");}

配置多个组

就是有很多个docket,

效果:

实体类

只要我们的接口中,有接口返回的是实体类,那么就是会被swagger扫描

我们写一个方法

    @PostMapping("/user")public User user(){return new User();}

返回的是实体类user,user里有两个字段,name和age

页面效果图:

那我们看到的如@API这些注解是干什么的呢?

Swagger注解

用来解释类的用@Apimodel

@ApiModel("用户信息实体类")
public class User{  }

用来解释类中的属性用@ApiModelProperty()

  @ApiModelProperty("用户名字")public String name;@ApiModelProperty("用户年龄")public int age;

小疑问:我用private修饰的变量这么写就不显示,怎么办?

解决方案:写在get方法上就可以有效果了

Swagger测试接口

测试接口十分好用,

我们可以测试自己的接口是否有效

小测试:

测试接口:

    @PostMapping("/userJY")public User user2(String name,int age){User user = new User(name,age);return user;}

测试页面步骤图

查看提交后的接口信息

Swagger总结

  1. Swagger最重大的使命就是使前后端人员之间的和谐关系有所好转
  2. 接口文档可以实时更新
  3. 可以在线测试后端接口,这个功能好评,爽的一批

Swagger是一个十分好用的工具,很多公司在使用

PS:处于安全考虑,我们在发布的时候需要关闭Swagger

swagger:快速入门相关推荐

  1. swagger快速入门(springfox)

    swagger快速入门 什么是swagger 什么是springfox 什么是swagger-bootstrap-ui 使用方法 第一步 第二步 第三步 完整代码 特别注意 什么是swagger sw ...

  2. 分库分表介绍和Sharding-JDBC快速入门

    1.分库分表介绍 垂直分表:可以把一个宽表的字段按访问频次.是否是大字段的原则拆分为多个表,这样既能使业务清晰,还能提升部分性能.拆分后,尽量从业务角度避免联查,否则性能方面将得不偿失. 比如我们可以 ...

  3. fastapi——简单快速入门

    fastapi--快速入门笔记 根据慕课网视频教程 地址:https://www.bilibili.com/video/BV1iN411X72b?p=36 print("\033[31m5. ...

  4. 狂神说笔记——MyBatisPlus快速入门24

    MyBatisPlus快速入门 需要的基础: MyBatis Spring SpringMVC 是什么? MyBatis 本来就是简化 JDBC 操作的! 官网:https://baomidou.co ...

  5. 2.【Sharding-JDBC】快速入门

    2.Sharding-JDBC快速入门 2.1 需求说明 本章节使用Sharding-JDBC完成对订单表的水平分表,通过快速入门程序的开发,快速体验Sharding-JDBC的使用方法. 人工创建两 ...

  6. springboot aop使用_Springboot 完整搭建快速入门,必看!

    点击上方蓝字关注我们 作者:CansluckCSDN博客:https://blog.csdn.net/xgx120413 前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Spr ...

  7. Spring Boot 2.x 基础教程: 快速入门

    一.SpringBoot介绍 1.1 SpringBoot简介 SpringBoot是由Pivotal团队研发的,SpringBoot并不是一门新技术,只是将之前常用的Spring,SpringMVC ...

  8. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  9. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  10. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

最新文章

  1. 数据库中存储与读取文件
  2. 编程之美-1的数目方法整理
  3. 多重连弹の多层级联 下拉框/查找框级联操作
  4. 4 谐波_技术文章—功率分析仪在IEC谐波的测试应用
  5. loadrunner录制脚本,页面无法显示
  6. c++语言中break的作用,C++ break和continue用法详解
  7. 设计模式状态模式uml_UML的完整形式是什么?
  8. 阿里技术专家光锥:亿级长连网关的云原生演进之路
  9. 【Elasticsearch】Elasticsearch gateway 流程分析
  10. java终止程序语句总结 System.exit(1)、System.exit(0)、return;break;continue;
  11. mysql 日期时间运算函数(转)
  12. python如何可视化编辑gui_python gui,python可视化窗口编程
  13. DS1302+LCD1602=万年历
  14. 软件测试到底要不要报培训班?
  15. matlab手眼标定
  16. 51单片机学习笔记(清翔版)(23)——红外通讯
  17. MicroDicom viewer(Dicom格式看图软件)v2.9.2官方版
  18. macbook安装免费vmware fusion
  19. 小程序实现6位数密码框
  20. iOS地图定位导航与大头针的简单使用

热门文章

  1. 网上如何申请临时车牌 网上申请临牌入口
  2. 团体程序设计天梯赛-练习集 L1-035 情人节
  3. 结合网页排名来做社会网络分析,挖掘核心人物
  4. 大数据入门选择python大数据么?现在程序员都是喜欢这个
  5. 博思得条码打印机打印空白页处理方法
  6. python类的方法中定义函数
  7. 计算机网络电缆被拔出是怎么办,笔记本电脑显示电缆被拔出怎么办
  8. 照片毫米换算成像素,26mm×32mm,分辨率150dpi?
  9. android swap 大小,android系统开swap简易流程
  10. Melis4.0[D1s]:1.启动流程(与adc按键初始化相关部分)跟踪笔记