freemarker使用说明_SpringBoot+Swagger2集成详细说明

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项目

d0fcced7702dfb95e003995ae9bef470.png

4ec47b1dc091482a34a9f6b0e1bcee42.png

da2d82748d9f5d0002610211ee4911af.png

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.项目结构

b658bb50042c5f803aec1c5450540efc.png

7.启动项目

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

8f549fd057c03677d43832cdb9581ecc.png

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<>());    }}

a296e0781fa7195f0d06cee1c8349987.png

问题来了:

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

 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");}

0e6cdc4045afde613fe5ab0a87c6cb87.png

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";    }}

f7a3bcfeea2dec4bae4d7af504ab6251.png

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();    }}

923c49b34c31618e4cf720a18618e014.png

cc3c2bfa3b703d414500d482c48aed7f.png

32eae6e3e17dc332a394733e2c3f27d4.png

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();    }}

4c3f3a61a1612aa8df0c7527f300c460.png

4365995679810e1a26ab1ca2d04aa74f.png

4.@ApiModel和@ApiModelProperty的使用

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

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

02c61f093a3c68ef42f32d96c85b0912.png

总结:

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

2.能够快速导出API文档

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

8226a147af2b0a32c28a04d2fb04129c.png

完整代码:

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

点亮 2dfe8b41dfdbacd39565272734194176.png,告诉大家你也在看 4935e78fb9347b1e679481f9d9646385.gif

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

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

相关文章

64位 iee754_什么是最大的非规格化和标准化数字?(64bit,IEE 754

我正在使用浮点算法&#xff0c;因为我很想理解这个主题&#xff01;我知道这些数字可以用科学记数法表示。因此&#xff0c;对于这两个数字&#xff0c;指数应该如下所示&#xff1a;非规范化数&#xff1a; 11 .... 11所以(1 1/2 1/2 ^ 2 ... 1/2 ^ 52)* 2 ^ 1023归一化数…

Vim中根据正则对选中文本对齐(比如ini文件的=号对齐)

vimrc增加如下内容即可&#xff1a; vnoremap <M-> :call Duiqi(\v(^\s*\S)\s(.*))<CR> "reg匹配的第2段文字对齐 function! Duiqi(reg) let l0 line("<") let l1 line(">") "获取第1个单词及前面空格的最大长度 let…

mysql pid_mysql pid文件是什么用途

展开全部MySQL pid 文件记录的是当前 mysqld 进程的 pid&#xff0c;pid 亦即 Process ID。可以通过如下的例子查62616964757a686964616fe58685e5aeb931333361316634看&#xff1a;$ /etc/init.d/mysqld startStarting MySQL. SUCCESS!$ ll /data/mysql/centos.pid-rw-rw---- 1…

[bzoj1305][CQOI2009]dance跳舞

一次舞会有n个男孩和n个女孩。每首曲子开始时&#xff0c;所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首或更多舞曲。有一些男孩女孩相互喜欢&#xff0c;而其他相互不喜欢&#xff08;不会“单向喜欢”&#xff09;。每个男孩最多只愿意和k个不喜欢的…

mysql主从架构搭建_mysql主从架构搭建

背景知识&#xff1a;主从这个架构可以实现数据备份&#xff0c;数据在多个服务器上分布等等&#xff0c;当然最主要的优点是可以实现负载均衡&#xff0c;将写操作交给主节点&#xff0c;读操作交给从节点。mysql官网有很多版本&#xff0c;例如Enterprise(企业版需要付费&…

Linux快速搭建FTP服务器

FTP 是File Transfer Protocol&#xff08;文件传输协议&#xff09;的英文简称&#xff0c;而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时&#xff0c;它也是一个应用程序&#xff08;Application&#xff09;。基于不同的操作系统有不同的FTP应用程序…

mysql 连接 监控_mysql监控优化(一)连接数和缓存

一、mysql的连接数MYSQL数据库安装完成后&#xff0c;默认最大连接数是100&#xff0c;一般流量稍微大一点的论坛或网站这个连接数是远远不够的&#xff0c;连接数少的话&#xff0c;在大并发下连接数会不够用&#xff0c;会有很多线程在等待其他连接释放&#xff0c;就可能会导…

集合框架(一) ----------Map集合遍历的方法

import java.util.*; /** * Map集合遍历的方法 * author Administrator * */public class Test2 { public static void main(String[] args) { Map<String,String> mapnew HashMap<String,String>(); /*Java 提供两种不同的类型&#xff1a; * 引用类型和原始类型&…

mysql事务总结_MySQL数据库和相关事务总结

以下的文章主要向大家描述的是MySQL数据库和相关事务&#xff0c;在实际操作中有很多人都认为MySQL数据库对事务处理是不支持的&#xff0c;其实&#xff0c;只要MySQL数据库版本支持BDB或是InnoDB表类型&#xff0c;那么你的MySQL就具有事务处理的能力。这里面&#xff0c;又以…

please reinstall the mysql distribution_php安装扩展mysqli的实现步骤及报错解决办法

php安装扩展mysqli的实现步骤及报错解决办法terminal#cd php-5.3.6/ext/mysqli#/usr/local/webserver/php/bin/phpize#./configure --with-php-config/usr/local/webserver/php/bin/php-config#make#make instal报错&#xff1a;checking for MySQLi support... yeschecking wh…

day35-hibernate映射 03-Hibernate持久态对象自动更新数据库

持久态对象一个非常重要的能力:自动更新数据库。 package cn.itcast.hibernate3.demo1;import static org.junit.Assert.*;import org.hibernate.Session; import org.hibernate.Transaction; import org.junit.Test;import cn.itcast.utils.HibernateUtils;/*** Hibernate的测…

mysql视图中调用函数写法_从视图中调用函数

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":5,"count":5}]},"card":[{"des":"阿里云函数计算(Function Compute)是一个事件…

微信 小程序 常见错误

VM148:2 pages/aaa/aaa.jsonExpecting STRING,NUMBER,NULL,TRUE,FALSE,{,[, got EOF 意思是 子组件的 json 文件不能为空 至少填一个{} appservice:18 pages/home/home 出现脚本错误或者未正确调用 Page() 原因是没有在相应页面的.js文件中调用Page&#xff08;&#xff09;&am…

mysql 角色管理_MySQL 8 用户和角色管理入门

MySQL 8.0 正式版目前已发布&#xff0c;MySQL 8.0 增加了很多新的功能&#xff0c;具体可参考「MySQL 8.0 正式版 8.0.11 发布&#xff01;」一文。MySQL 8.0 在用户管理方面增加了角色管理&#xff0c;默认的密码加密方式也做了调整&#xff0c;由之前的 SHA1 改为了 SHA2。同…

go 删除 文件 某行_Go实战--用echo嵌入静态资源

生命不止&#xff0c;继续 go go go !!!使用 Go 开发应用的时候&#xff0c;有时会遇到需要读取静态资源的情况。比如开发 Web 应用&#xff0c;程序需要加载模板文件生成输出的 HTML。在程序部署的时候&#xff0c;除了发布应用可执行文件外&#xff0c;还需要发布依赖的静态资…

python 运维自动化之路 Day2

学习内容&#xff1a; 1、模块初识 2、Pyc是什么 3、Python数据类型 4、数据运算 5、bytes数据类型 6、列表和元组的使用 7、字符串常用操作 8、字典的使用 1、模块初识 如果用 python 解释器来编程&#xff0c;从 Python 解释器退出再进入&#xff0c;那么你定义的所有的方法和…

mysql多源复制 知乎_MySQL多主一从(多源复制)同步配置

&#xfeff;>多主一从&#xff0c;也称为多源复制&#xff0c;数据流向。这是小编的服务器部署的一次小尝试&#xff0c;实际工作中还没遇到过形式主库1 -> 从库s主库2 -> 从库s主库n -> 从库s应用场景数据汇总&#xff0c;可将多个主数据库同步汇总到一个从数据库…

关于算法模板和规范的说明

这里记录的算法模板和规范仅供个人使用&#xff0c;可能会存在BUG。由于使用本博客模板导致的BUG及其负面影响&#xff0c;本人概不负责。转载于:https://www.cnblogs.com/hzs2000/p/6682699.html

aMDcpu不支持mysql_Oracle 11.2.0.1在AMD CPU 64位硬件,32位操作系统下的BUG 8670579

通过查询meatlink原因是在ORACLE11.2.0.1 AMD 64位CPU下安装了32位的操作系统&#xff0c;触发了bug 8670579&#xff0c;那要解决该问题只需打上86705bug 8670579硬件信息&#xff1a;CPU:AMD X6在执行dbca的时候也报错如下&#xff1a;[Oracleyorkshi ~]$ dbca## An unexpect…

《网络攻防》第6周作业

20169310 2016-2017-2 《网络攻防实践》第6周学习总结 教材学习内容总结 本周主要学习了《网络攻防---技术与实践》第5、6章的内容&#xff0c;主要学习了 TCP/IP网络协议攻击 和 网络安全防范技术 TCP/IP网络协议攻击概述 网络安全的属性&#xff1a;机密性 、完整性 、可用性…