百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

从零搭建后端框架:对方不想说话但扔了个swagger2

liuian 2025-02-26 12:45 19 浏览

现在大部分公司的软件架构都是微服务+前后端分离,说到前后端分离,不仅仅是因为技术架构的迭代更新导致的,主要还是因为产品经历了从无到有从增量到存量的时间,用户的需求已经从能用到好用。产品除了要快速迭代抢占市场外,还需要提高用户体验博取眼球。所以前后端的分离,也衍生除了前端工程师、后端工程师来共同完成一个功能的开发。

所以接下来要考虑的问题,如何制定前后端的接口规范,如何提供接口清单。前面的问题现在已经解决了,所以很多研发团队都是后端工程师写好接口文档后,自己先用postman测一下,然后写一份接口清单文档,发给前端,如果接口调整了,又要写一个文档。而且经常因为接口文档写的不好、给的太慢,被前端和TL怼。花少也被怼过几次,傲娇的花少闹起了小脾气,所以在工位上放了纸条“花少已死,有事扫支”,同时扔了个swagger2


花少揭秘四部曲:

1、添加Maven依赖

io.springfox

springfox-swagger2

2.9.2

io.springfox

springfox-swagger-ui

2.9.2

2、创建Swagger配置

创建Swagger配置

@Configuration

@EnableSwagger2

public class SwaggerConfig {

@Bean

public Docket docket() {

return new Docket(DocumentationType.SWAGGER_2)

.select()

// apis 指定生成API的扫描条件

.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))

// 扫描包

//.apis(RequestHandlerSelectors.basePackage("com.zhuqc.framework.controller"))

// paths 指定生成API的path

.paths(PathSelectors.any())

.build()

// 文档信息

.apiInfo(apiInfo());

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder()

.title("花少教你从零搭建后端框架")

.description("API接口文档")

.termsOfServiceUrl("https://www.baidu.com/")

.contact(new Contact("花少", "", ""))

.version("0.0.1")

.build();

}

}

@EnableSwagger2 开启Swagger2

apis 用来指定扫描的条件

RequestHandlerSelectors.basePackage("com.zhuqc.framework.controller"),扫描指定包

RequestHandlerSelectors.withClassAnnotation((Api.class),扫描@Api标注的类

RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class),扫描@ApiOperation标注的方法

RequestHandlerSelectors.any(),总是true

RequestHandlerSelectors.none(),总是false

默认配置是没有@ApiIgnore标注的类和方法

paths 用来指定生成API的path

PathSelectors.any(),总是true

PathSelectors.none(),总是false

PathSelectors.regex(),正则表达式匹配

PathSelectors.ant(),Ant表达式匹配

apiInfo 用来指定文档信息

3、Swagger使用

@Api(description = "花少向你扔了个Swagger2")

@RestController

public class HelloController {

@ApiOperation(value = "需求", notes = "花少的需求")

@ApiImplicitParams({

@ApiImplicitParam(name = "name", value = "需求", required = true)

})

@GetMapping("/hello/{name}")

public String hello(@PathVariable String name) {

return String.format("花少需要你们的 %s!", name);

}

}

常见注解

@Api 修饰整个类,描述整个Controller的作用

@ApiOperation 修饰方法,描述方法的作用

@ApiParam 修饰参数,描述参数的作用

@ApiIgnore 表示忽略当前API

@ApiImplicitParams 描述多个请求参数

@ApiImplicitParam 描述一个请求参数

@ApiModel 如果参数是对象,则在对象所在类上标注,用于描述对象

@ApiModelProperty 如果参数是对象,则在对象所在类的属性上标注,用于描述对象的属性

4、启动项目

准备工作已完成,启动项目后访问Swagger地址:http://localhost:8080/swagger-ui.html

测试效果如下:



到这里Swagger2已集成完毕,不过我们还是要养成在开发或修改完接口的同时,顺手修改下接口描述,否则咱们帅不过三秒瞬间打脸,只能宣告装死失败!

花有重开日,人无再少年 → 我是花少【少宫主花无缺】#更新不断,创作不易#走过路过不不白piao,留下关注和点赞(公众号同名)@all

相关推荐

python入门到脱坑函数—定义函数_如何定义函数python

Python函数定义:从入门到精通一、函数的基本概念函数是组织好的、可重复使用的代码块,用于执行特定任务。在Python中,函数可以提高代码的模块性和重复利用率。二、定义函数的基本语法def函数名(...

javascript函数的call、apply和bind的原理及作用详解

javascript函数的call、apply和bind本质是用来实现继承的,专业点说法就是改变函数体内部this的指向,当一个对象没有某个功能时,就可以用这3个来从有相关功能的对象里借用过来...

JS中 call()、apply()、bind() 的用法

其实是一个很简单的东西,认真看十分钟就从一脸懵B到完全理解!先看明白下面:例1obj.objAge;//17obj.myFun()//小张年龄undefined例2shows(...

Pandas每日函数学习之apply函数_apply函数python

apply函数是Pandas中的一个非常强大的工具,它允许你对DataFrame或Series中的数据应用一个函数,可以是自定义的函数,也可以是内置的函数。apply可以作用于DataF...

Win10搜索不习惯 换个设定就好了_window10搜索用不了怎么办

Windows10的搜索功能是真的方便,这点用惯了Windows10的小伙伴应该都知道,不过它有个小问题,就是Windows10虽然会自动联网搜索,但默认使用微软自家的Bing搜索引擎和Edge...

面试秘籍:call、bind、apply的区别,面试官为什么总爱问这三位?

引言你有没有发现,每次JavaScript面试,面试官总爱问你call、bind和apply的区别?好像这三个方法成了通关密码,掌握了它们,就能顺利过关。其实不难理解,面试官问这些问题,不...

记住这8招,帮你掌握“追拍“摄影技法—摄影早自习第422日

杨海英同学提问:请问叶梓老师,我练习追拍时,总也不能把运动的人物拍清晰,速度一般掌握在1/40-1/60,请问您如何把追拍拍的清晰?这跟不同的运动形式有关系吗?请您给讲讲要点,谢谢您!摄影:Damia...

[Sony] 有点残酷的测试A7RII PK FS7

都是好机!手中利器!主要是最近天天研究fs5,想知道fs5与a7rii后期匹配问题,苦等朋友的fs5月底到货,于是先拿手里现有的fs7小测一下,十九八九也能看到fs5的影子,另外也了解一下fs5k标配...

AndroidStudio_Android使用OkHttp发起Http请求

这个okHttp的使用,其实网络上有很多的案例的,但是,如果以前没用过,copy别人的直接用的话,可以发现要么导包导不进来,要么,人家给的代码也不完整,这里自己整理一下.1.引入OkHttp的jar...

ESL-通过事件控制FreeSWITCH_es事务控制

通过事件提供的最底层控制机制,允许我们有效地利用工具箱,适时选择使用其中的单个工具。FreeSWITCH是一个核心交换与混合矩阵,它周围有几十个模块提供各种功能特性。我们完全控制了所有的即时信息,这些...

【调试】perf和火焰图_perf生成火焰图

简介perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些...

文本检索控件也玩安卓?dtSearch Engine发布Android测试版

dtSearchEngineforLinux(原生64-bit/32-bitC++和JavaAPIs)和dtSearchEngineforWin&.NET(原生64-bi...

网站后台莫名增加N个管理员,记一次SQL注入攻击

网站没流量,但却经常被SQL注入光顾。最近,网站真的很奇怪,网站后台不光莫名多了很多“管理员”,所有的Wordpres插件还会被自动暂停,导致一些插件支持的页面,如WooCommerce无法正常访问、...

多元回归树分析Multivariate Regression Trees,MRT

多元回归树(MultivariateRegressionTrees,MRT)是单元回归树的拓展,是一种对一系列连续型变量递归划分成多个类群的聚类方法,是在决策树(decision-trees)基础...

JMETER性能测试_JMETER性能测试指标

jmeter为性能测试提供了一下特色:jmeter可以对测试静态资源(例如js、html等)以及动态资源(例如php、jsp、ajax等等)进行性能测试jmeter可以挖掘出系统最大能处...