SpringBoot+Swagger2集成详细说明

引言:

为什么使用Swagger?

在Vue没有出来之前,都是前后端在一起:

  • 后端用的SSM或者SSH框架

  • 前端完全就是静态页面+模板引擎。例如:JSP开发久的人应该听说过,和现在的Thymeleaf、 Velocity、FreeMarker 类似

在Vue出来之后,进入真正的前后端分离时代:

  • 后端依然可以是SSM架构,而现在大厂都在使用微服务SpringBoot、SpringCloud等

  • 前端就独立出来了,只管呈现效果也就是是三层架构的视图层

为什么叫前后端分离呢?

分离就是各自开发自己的,互不干扰

优点:

  • 前端可以不用等后端人员开发完在测试,直接就可以使用Json伪造数据测试,例如:JsonServer工具

  • 可以部署在不同的服务器上

  • 有新的项目可以随时拆分模块

缺点:

  • 此时就需要在招专业开发前端的人员,这就是老板的事了。。。

Swagger简介:

Swagger是一个流行的API开发框架,Swagger容许用户使用Swagger编辑器描述OAS 3.0API,并使用SwaggerUI可视化并自动生成OAS 3.0中定义的API文档。

Swagger可以对整个API开发周期提供一个完整框架,解决调试过程中的各种问题,包括API设计,开发,测试,完档,并且几乎支持所有语言。

Swagger的用途来了:

问题:

前后端分离联调,前后端人员无法做到及时的调试?

当年的解决方案:
  • 编写Word文档,及时更新(但是很难做到,一般容易忘记)

  • 模拟测试后端接口:postman

  • 后端开发完之后,提供接口,根据需求在调整

现在的解决方案:
  • Api文档与API定义同步更新

  • 直接运行,在线测试后端接口

  • 对多种编程语言的支持

SpringBoot集成Swagger:

1.建立SpringBoot-Web项目

2.引入Swagger依赖

Swagger UI:用于展示API规范

Springfox:是一个通过扫描代码提取代码中的信息,生成API文档的工具。API文档的格式不止Swagger的OpenAPI Specification,还有RAMLjsonapi,Springfox的目标同样包括支持这些格式。

 <dependency>    <groupId>io.springfoxgroupId>    <artifactId>springfox-swagger2artifactId>    <version>2.9.2version>dependency><dependency>    <groupId>io.springfoxgroupId>    <artifactId>springfox-swagger-uiartifactId>    <version>2.9.2version>dependency>

3.配置Swagger

 @Configuration@EnableSwagger2 // 开启Swaggerpublic class SwaggerConfig {}

4.编写Controller

 @RestControllerpublic class TestController {    @RequestMapping("hello")    public String hello(){        return "hello swagger2";    }}

6.项目结构

7.启动项目

访问:http://localhost:8080/swagger-ui.html

Swagger配置进阶

Swagger信息和组信息进行配置

 @Configuration@EnableSwagger2 // 开启Swaggerpublic class SwaggerConfig {//    配置Docket的bean实例    @Bean    public Docket docket(Environment environment){        return new Docket(DocumentationType.SWAGGER_2)                .apiInfo(apiInfo())                .enable(true)// enable是否启动Swagger,如果False,则Swagger不能再浏览器中访问                .groupName("yangjun")// 配置API分组                .select()//                RequestHandlerSelectors,配置扫描接口的方式//                basePackage:指定要扫描的包//                any():扫描全部//                none():不扫描//                withClassAnnotation:扫描类上的注解,参数是一个注解的反射对象//                withMethodAnnotation:扫描方法上的注解                .apis(RequestHandlerSelectors.basePackage("com.example.controller"))//                paths 过滤路径                //.path(PathSelectors.ant("/example/**"))                .build();    }//    配置Swagger信息=apiInfo    private ApiInfo apiInfo() {//      作者信息        Contact contact = new Contact("作者:XX","作者QQ空间","作者Email");        return new ApiInfo("测试SwaggerApi文档"        ,"好好学习,天天向上",                "V0.1",                "团队文档地址",                contact,                "Apache2.0",                "Apache2.0地址",                new ArrayList<>());    }}

问题来了:

如果我们只在测试环境中使用,而不在生产环境中使用该怎么办?

 enable(true)// enable是否启动Swagger,如果False,则Swagger不能再浏览器中访问
  • 判断当前的环境

  • 设置enable(true)值

 public 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())        .enable(flag)// enable是否启动Swagger,如果False,则Swagger不能再浏览器中访问        .groupName("yangjun")// 配置API分组        .select()        .apis(RequestHandlerSelectors.basePackage("com.example.controller"))        .build();}

配置分组

配置多个实例即可

 @Beanpublic Docket docket1(){return new Docket(DocumentationType.SWAGGER_2).groupName("测试分组1");}@Beanpublic Docket docket2(){return new Docket(DocumentationType.SWAGGER_2).groupName("测试分组2");}

API使用:

涉及到的5个注解

  • @Api(tags = "类"):加在类上

  • @ApiOperation:加在方法上

  • @ApiParam("用户名"):加在参数上

  • @ApiModel("用户实体类"):加在实体类上

  • @ApiModelProperty("用户名"):加在字段上

1.@Api的使用

在类上使用主要来阐述这个类的作用

 @Api(tags = "TestController测试类")@RestControllerpublic class TestController {    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String hello(){        return "hello swagger2";    }}

2.@ApiOperation的使用

在方法上使用主要来阐述这方法的用户以及需要传入那些参数和类型

 @Api(tags = "TestController测试类")@RestControllerpublic class TestController {    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String hello(){        return "hello swagger2";    }    @ApiOperation("测试控制类1")    @PostMapping("/user1")    public String getUser2(@ApiParam("用户名") User user){        return user.toString();    }}

3.@ApiParam的使用

定义用户输入参数的格式,不用在拼接字符串,Swagger会自动配置好,我们只要填入参数测试

 @Api(tags = "TestController测试类")@RestControllerpublic class TestController {    @RequestMapping(value = "/hello",method = RequestMethod.GET)    public String hello(){        return "hello swagger2";    }    @ApiOperation("测试控制类1")    @PostMapping("/user1")    public String getUser2(@ApiParam("用户名") User user){        return user.toString();    }}

4.@ApiModel和@ApiModelProperty的使用

在实体类使用,提供每个字段名和类型,关键可以和MybatisPlus一起使用,只要在数据库中定义好字段的备注,使用MP的代码自动生成就OK了

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

总结:

1.在开发过程中对接口更新更快

2.能够快速导出API文档

3.不用第三方工具即可测试接口

完整代码:

https://gitee.com/hahaguai007/springboot-swagger2.git

点亮 ,告诉大家你也在看

freemarker使用说明_SpringBoot+Swagger2集成详细说明相关推荐

  1. Tapd GitHub集成 详细图片

    此为系列博客 阿里云服务器 CentOS7 Tomcat + Jenkins+国内镜像 TAPD关联Jenkins Tapd GitHub集成 详细图片(当前位置) TAPD pytest自动化测试部 ...

  2. echart freemarker 模板_SpringBoot集成Freemarker模板生成Echarts图片(三)

    紧接着前面两篇,本篇采用Freemarker模板来生成Echarts图片. 一. 项目结构 二. Freemarker模板 (1)柱状图 { "title": { "te ...

  3. springboot系列(十七):集成在线接口文档Swagger2|超级详细,建议收藏

  4. 微信小程序开发:腾讯地图集成详细步骤

    前言 在腾讯生态开发过程中,包括在微信小程序开发的时候,避免不了使用腾讯送的腾讯大礼包,从微信支付到腾讯地图,一条龙的腾讯大礼包,不得不说鹅厂的实力是无可比拟的.但是话又说回来了,鹅厂的官方 API ...

  5. 社会化三方分享集成详细介绍(友盟)

    相信做开发的猿友们肯定会接触三方分享,那么三方分享怎么具体集成呢,当初我吃过苦头,现在想为新手们写一个详细的集成介绍.大神请自行走开... 我这里就介绍友盟的三方了吧,目前使用比较广泛,三方呢,这里只 ...

  6. 循环依赖和Swagger2集成小问题

    每天一个菜鸟小问题2: 1.在写Autowired自动注入的时候,因为后面有重写Bean,然后会发生循环依赖问题:一个可行的解决方法就是在yml配置的spring下面加main: allow-circ ...

  7. ShareSDK分享集成详细过程

    ShareSDK分享功能详细集成步骤(针对没集成过的菜鸟而写,大神路过,如有不足欢迎指出) 官方集成文档 一.对于没有集成过的新手来说,首先是要拥有一个自己的Mob账号,如有请自动略过此部分 1.注册 ...

  8. swagger2 集成无效_Springboot2 集成Swagger2,解决配置完成后不显示的坑

    //注解开启swagger2功能@EnableSwagger2//注解标示,这是一个配置类,@Configuation注解包含了@Component注解//可以不用在使用@Component注解标记这 ...

  9. redis 依赖_springboot|springboot集成redis缓存

    javaDEMO 本网站记录了最全的各种JavaDEMO ,保证下载,复制就是可用的,包括基础的, 集合的, spring的, Mybatis的等等各种,助力你从菜鸟到大牛,记得收藏哦~~https: ...

最新文章

  1. 【只需简单三个步骤】ACE系统前后端不分离情况下如何增加一个JSP嵌入页面
  2. 如何定制一款12306抢票浏览器——构架
  3. 进程间通信(IPC)学习
  4. oracle事务数统计,oracle函数与事务
  5. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY6-支持向量机
  6. python必学_Python必学框架
  7. 客户端服务端防止用户重复提交表单
  8. 光端机是做什么的?光端机的作用主要有哪些?
  9. r中gglot怎么组合多张图_继电器组合扫盲篇
  10. 三星4k3d电视测试软件,三大硬性指标 揭开伪4K电视真实面目
  11. SAR图像聚焦质量评价插件
  12. java8421码,8421BCD转余3码Verilog HDL的设计(2)
  13. Centos8安装GitLab14.2开源代码托管工具
  14. 原生javascript手风琴图片切换案例
  15. mac安装破解idea
  16. 关于字符串子串 真子串 非空子串 非空真子串的求解方法
  17. 计算机中rom,计算机中rom指的是内存还是外存
  18. 状压搜索 Circling Round Treasures:CodeForces - 375C
  19. Ubuntu 16.04下安装配置Trac项目管理工具
  20. 大数据时代,女性做数据分析师有没有优势?

热门文章

  1. php 点击选择图片上传,php上传多张图片时,选择图片后即可预览的问题
  2. js 静止f1到f12 和屏蔽鼠标右键
  3. Dom对象、JavaScript对象、jQuery对象区别
  4. vue jsx 使用 自定义组件
  5. mysql定义shell变量_shell 变量的定义,赋值,运算
  6. MSSQL优化之————探索MSSQL执行计划
  7. ceb怎么转换成word_PDF怎么转换成Word?分享免费转换技巧!
  8. 利用websocket实现一对一聊天
  9. 实验项目 3-4:一元多项式的乘法与加法运算
  10. 【数据结构学习之完全从零实现所有数据结构的代码编写之二】智能指针