当前位置: 首页 > news >正文

安装网站/外贸建站与推广

安装网站,外贸建站与推广,凌哥seo节点,网站建设个体营业执照Swagger的介绍 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述 文件可以去更…

Swagger的介绍

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger,就是把相关的信息存储在它定义的描述文件里面(yml或json格式),再通过维护这个描述 文件可以去更新接口文档,以及生成各端代码。而Springfox-swagger,则可以通过扫描代码去生成这个 描述文件,连描述文件都不需要再去维护了。所有的信息,都在代码里面了。代码即接口文档,接口文档即代码。总体目标是使客户端和文件系统作为服务器以同样的速度来更新。文件的方法,参数和模型 紧密集成到服务器端的代码,允许API来始终保持同步。

swagger的主要作用

Swagger最主要的作用就是接口文档的在线自动生成和功能测试,也就是测试我们开发的功能是否可用。

Swagger的使用

如果直接使用Swagger是非常麻烦的,应为需要使用Swagger其实就是在编写一个json文件,这个是十分的繁琐的一道过程。所以一般是使用的java的mvc集成Swagger的框架增强的解决方案knife4它的底层是由Swagger组成的但是使用起来是相对比较简单的。

1.导入依赖

<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version>
</dependency>

2.导入knife4相关的配置类

@EnableSwagger2
@EnableKnife4j//与上面的注解表示开启了Swagger文档功能
@Configuration//声明为配置类
public class WebMvcConfig extends WebMvcConfigurationSupport {//mvc静态资源的映射类
//创建api接收文档
@Bean
public Docket createRestApi(){return  new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().apis(RequestHandlerSelectors.basePackage("你的controller包在项目中的位置")).paths(PathSelectors.any()).build();
}
​
//api的接口文档的模板
private ApiInfo apiInfo(){return new ApiInfoBuilder().title("标题").version("版本号").description("描述的信息").build();}
}

上面第一个方法的返回值docket是文档的意思,通过这个对象来具体描述文档的信息,需要注意.apis(RequestHandlerSelectors.basePackage())这里面需要项目中的controller的包的位置,因为前段发送请求是发送进入的controller中的某个方法上面,所以需要来扫描每一个方法,最终映射成一个接口。然让其生成出对于的接口文档

3.设置静态资源的映射

设置这个的原因是需要让接口文档页面可以被访问。

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}

doc.html这个页面并不需要我们自己写,而是有框架帮助我们自动生成的。

4.在你的拦截器设置不需要进行处理的路径

配置好后需要在你的拦截器上面对于接口文档的路径。

"/doc.html",
"/webjars/",
"/swagger-resources",
"/v2/api-docs"

如果并不想要设计的话,可以先进行登录之后可以直接进行访问。

Swagger效果展示

添加后成功的效果如图显示

我们可以从上获取到诸多信息,如作版本、host、basePaht、分租Url等信息。 这些信息都是我们之前添加在kinfe4中的apiInfo方法中所设置的信息。我们可以看到所统计的接口信息,比如post、put、delete、get等接口d的数量

具体可以看我们的左侧的信息展示,可以清晰的看见我们每一个的controller类里面的接口具体有多少个,可以非常清晰的展示在我们页面上。

我们选择一个点开看可以将我们每一个方法的方法名和请求类型都展示在页面上给我吗后端开发人员进行查看。

我们选择一个方法点开查看,可以清晰的看见我们该方法的参数名称和我们该参数的类型,比如我们参数的请求示例、响应数据类型等信息。我们的参数在下面也可以获取到这个参数是否是必须需要的。

继续往下翻找可以看的这个方法的响应状态、响应参数、响应示例等信息。我们可以从响应示例看出我们的具体响应是什么样子的方便我们使用。

我们点击调用可以看见我们的请求所需要的参数,可以进行输入参数也可以点击发送,也可以直接点击发送。

这里可以看见我们的请求已经返回了,这里是已经登陆的情况,如果并没有登录会在msg里面返回一个NOTLOGIN。

我们不仅可以通过knife4自动生成接口文档,给我们后端开发人员使用来进行测试,还有可以将我们这个生成的文档导出。

我们点击这个文档管理下面的离线文档,可以在右侧显示中看见它为我们提供了4种下载方式Html、Markdown、Word、OpenAPI。

我们选择Markdown下载模式可以看见它已经为我们下载好了。我们点开刚刚下载好的文档查看。

可以看见我们已经是提供好了我们整个项目的api文档,如果你选择的是Openapi的下载方式那么下载出的格式是json类型。

在左侧的Swagger Models里面有着我们整个项目的数据模型模型,每一个类点开之后属性都会展示出来,给我们可以快速且方便的查询。

Swagger的常用注解

1.@Api

这个主要用在请求类,例如Controller,表示对于类的说明。

使用方式:@Api(value = "/user", description = "Operations about user")

它表示数据是user类型的,

  • value:这是类的路径,将在生成的 Swagger 文档中显示。

  • description:这是对数据来源的描述,也将在生成的 Swagger 文档中显示

2.@ApiModel

通常使用在实体类上,表示返回响应数据的信息。

@ApiModel(value = "UserModel", description = "A model representing a user")

这个表示来自于user类,它提供了两个属性

  • value:这是模型的名称,将在生成的 Swagger 文档中显示。

  • description:这是对模型的描述,也将在生成的 Swagger 文档中显示

3.@ApiModelProperty

这个注解则用于类中的字段,并为它们提供了额外的元数据,如字段的描述和是否必需等。通过使用这些注解,你可以更容易地为你的 RESTful Web 服务生成和维护 API 文档,它的属性有:

value:字段说明 name:重写属性名字 dataType:重写属性类型 required:是否必填(true为必填) example:举例说明 hidden:隐藏(true为隐藏)

例如: @ApiModelProperty(value = "值",required = true/false,name="属性名",example="说明")

4.‌@ApiOperation

主要使用于方法表示一个http请求的操作,方法如下:

@ApiOperation(value = “接口说明”, httpMethod = “接口请求方式”, response = “接口返回参数类型”, notes = “接口发布说明”)

value:对该操作进行简单的描述,尽量控制在120字符以内。 notes:对操作的详细描述。 httpMethod:指定操作使用的HTTP方法类型,可选值 “GET”、“HEAD”、“POST”、“PUT”、“DELETE”、“OPTIONS”和“PATCH”。 tags:用来给操作打标签,Swagger UI 将在操作列表下面展示 tag 列表,每个 tag 下面展示拥有该 tag 的操作列表。(就是分组)

5.‌@ApiImplicitParam

作用在方法上,表示单独的请求参数它的属性有:

1.name :参数名。

2.value : 参数的具体意义,作用。

3.required : 参数是否必填。

4.dataType :参数的数据类型。

5.paramType :查询参数类型,这里有几种形式

类型的作用:

path 以地址的形式提交数据 query 直接跟参数完成自动映射赋值 body 以流的形式提交 仅支持POST header 参数在request headers 里边提交 form 以form表单的形式提交 仅支持POST

6.‌@ApiImplicitParams

使用在请求方法上面,表示接受多个@ApiImplicitParam参数

Swagger常用接口的使用

1.@ApiModel和@ApiModelProperty的用法

选择一个实体类使用上面的@ApiModel和@ApiModelProperty注解,运行后在doc.html里面查看我们的结果。

可以清晰看到的看见我们之前的setmeal类已经改名为套餐,也就是我们在@APIModel里面设置的名称,并且点开这个类已经可以看的我们的属性里面有说明,它的话是我们在@ApiModelProperty里面设置的说明。

2.@Api和@ApiOperation的用法

将我们的上面的@Api和@ApiOperation添加到我们的controller也就是请求方法上面。保存进行运行再次到doc.html里面查看我们这个controller类有什么变化。

可以看见我们doc.html页面上的左侧已经进行了更新,上面显示的接口名不再是类名而是我们在@Api里面输入的名称,并且方法名也是我们在@ApiOperation里面所输入的名称。

3.@ApiImplicitParam和@ApiImplicitParams的用法

我们使用了ApiImplicitParams将多个ApiImplicitParam包裹起来,每一个ApiImplicitParam里面都是我们方法所需要的一个参数,并标明其名称和意义以及是否是必须要传递的参数等信息

已经可以看到我们的参数的一些说明和信息,也就是我们在ApiImplicitParam所包含的参数里面给其添加的信息,这也更加方便我们开发时对于项目的检查和理解。

相关文章:

Java的Mvc整合Swagger的knife4框架

Swagger的介绍 Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。使用Swagger&#xff0c;就是把相关的信息存储在它定义的描述文件里面&#xff08;yml或json格式&#xff09;&#xff0c;再通过维护这个描述 文件可以去更…...

分阶段构建在复杂系统中的应用:以推荐系统为例

引言 在信息技术飞速发展的今天&#xff0c;复杂系统的构建已经成为许多企业和组织面临的重要挑战。复杂系统通常由多个相互依赖、相互作用的组件构成&#xff0c;这些组件在功能上相互关联&#xff0c;形成了一个高度耦合的整体。对于这样的系统&#xff0c;采用分阶段构建的…...

2024年12月9日历史上的今天大事件早读

1447年12月9日 中国明朝皇帝明宪宗出生 1824年12月9日 西属美洲独立战争的阿亚库乔之战爆发 1882年12月9日 中国清代数学家李善兰逝世 1917年12月9日 葡萄牙共和政府垮台 1935年12月9日 红军表示与东北抗联军一致抗日 1935年12月9日 “一二九”运动爆发 1941年12月9日 中…...

快捷构建AI大模型,源码自取可直接运行

Node.js 和 WebSocket 实现一个基于kimi&#xff08;Moonshot 月之暗大模型&#xff09;的AI工具 前端&#xff1a;前端界面比较容易&#xff0c;只需要简单的额css js即可&#xff0c;本文使用vue作为作为demo。 后端&#xff1a;我java很垃圾&#xff0c;写不出好的代码&am…...

怎么为开源项目做贡献提PR?

GitHub 慢的话&#xff0c;https://ask.csdn.net/questions/8166374 复刻项目 以 https://github.com/open-frame/uniapp-init 项目为例 复刻完就会在你的仓库里有个同样的项目 拉取复刻下来的项目 然后常规的改动项目、git推送。比如我改了一个忽略文件&#xff1a; 提交…...

如何在 JavaScript 中设置定时器?

在 JavaScript 中&#xff0c;设置定时器通常使用两个内置的函数&#xff1a;setTimeout() 和 setInterval()。它们允许你在指定的时间延迟后执行某个函数或者以某个间隔反复执行某个函数。下面&#xff0c;我将结合实际项目代码示例讲解如何使用它们。 1. setTimeout() — 延…...

【学习路线】Java

Java基础 基础 基础语法 面向对象 集合框架 JCF 进阶 并发编程 JVM 企业级开发 框架 Spring Boot Spring Cloud 分布式 高性能 高可用 安全 基建 Docker 实战 数据库 MySQL Redis 计算机基础 计算机组成原理 操作系统 计算机网络 数据结构与算法 设计模式 参考&#xff1a;…...

[GYCTF2020]Easyphp

[GYCTF2020]Easyphp 知识点 反序列化 、字符逃逸 解题 审代码 <?php error_reporting(0); session_start(); function safe($parm){$array array(union,regexp,load,into,flag,file,insert,"",\\,"*","alter");return str_replace($arr…...

JavaScript 数组的高级用法与最佳实践

在前端开发中&#xff0c;JavaScript 数组是不可或缺的工具。它们不仅用于存储数据&#xff0c;还提供了丰富的方法来操作和处理这些数据。掌握 JavaScript 数组的高级用法和最佳实践对于编写高效、可维护的代码至关重要。本文将深入探讨 JavaScript 数组的高级用法&#xff0c…...

通信协议 http、tcp、udp

目录 1. 五层网络协议 2. http 3. tcp、udp 4. tcp 3次握手、4次挥手 5. socket 6. httpclient 遇到的问题 1. Q: 使用 EntityUtils.toString(responseEntity, "UTF-8") 中文乱码 2. Q: org.apache.http.NoHttpResponseException: 221.6.16.203:8890 failed …...

Scala的隐式对象和隐式类

1.隐式对象 object Test1 {case class DatabaseConfig(drive:String,url:String)//隐式对象//格式:就是在对象前面加一个 implicit//作用:给函数当默认值implicit object MySqlConfig extends DatabaseConfig("sqlserver.jdbc","localhost:3306")//定义一…...

【AIGC】2016-ACCV-即时追捕:自然环境下的自动唇音同步

2016-ACCV-Out of time: automated lip sync in the wild 摘要1. 引言1.1 相关作品 2. 表示和架构2.1 音频流2.2 视觉流2.3 损失函数2.4 训练 3. 数据集3.1 编制训练数据 4. 实验4.1 确定口型同步误差4.2 应用&#xff1a;主动说话人检测4.3 应用&#xff1a;唇读 5. 结论参考文…...

启智畅想集装箱箱号识别算法,2台相机即可实现较高识别率

启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可。启智畅想集装箱箱号识别算法&#xff0c;在货车通道中使用时&#xff0c;一般配备2台相机即可实现对集装箱箱号的精准捕捉与识别。这两台相机分别安装在货车通道的后侧和随意侧面&a…...

让IIS支持PUT请求解决IIS里不支持PUT请求的问题405 Method Not Allowed

文章目录 一、问题描述二、解决方案1.删除WebDav模块2.修改Web.config&#xff08;可选&#xff09; 一、问题描述 好不容易系统开发好了&#xff0c;兴高采烈地上线&#xff0c;部署好了网站&#xff0c;访问正常&#xff0c;打开方式正确&#xff01; 但当我修改某些数据时&…...

入门级捡垃圾工作站记录

入门级捡垃圾工作站记录 想法 一直想着拥有有一台自己的多功能机子&#xff0c;一个笔记本很难事事包办&#xff0c;本来打算配一个台式机&#xff0c;后来研究了一下&#xff0c;索性捡垃圾拼装的工作站&#xff0c;性价比更高&#xff0c;稳定性也更强&#xff0c;而且还可…...

2024.12.9——攻防世界ics-06

知识点&#xff1a;index文件 ics 文件&#xff08;iCalendar 格式文件&#xff09; bp抓包 密码爆破 题目&#xff1a;云平台报表中心收集了设备管理基础服务的数据&#xff0c;但是数据被删除了&#xff0c;只有一处留下了入侵者的痕迹。 一、解题思路 step 1 打开靶机审题…...

微信小程序介绍-以及写项目流程(重要)

前言&#xff1a;本篇文章介绍微信小程序以及项目介绍&#xff1a; 文章介绍&#xff1a;介绍了微信小程序常用的指令、组件、api。tips&#xff1a;最好按照官方文档来进行学习&#xff0c;大致可以我的目录来学习&#xff0c;对于写项目是没有问题的 微信小程序官方文档https…...

国内国际标准!羊毛衫检测项目、检测要求及标准

本文整理了羊毛衫检测项目、检测要求及标准有关内容 一、羊毛衫检测项目 羊毛衫的检测项目主要包括以下几个方面&#xff1a; 纤维含量检测&#xff1a;检测羊毛衫中羊毛及其他纤维的比例&#xff0c;确保纤维质量符合产品标识或相关标准要求。 甲醛含量检测&#xff1a;测…...

MySQL知识大总结(进阶)

一&#xff0c;数据库的约束 1&#xff0c;约束类型 1not null非空约束&#xff0c;标记这个字段不可以为空2unique唯一约束&#xff0c;标记这个字段的值是该列唯一的值&#xff0c;在这一列的其他行&#xff0c;不可以与该字段相等3default 默认约束&#xff0c;在该字段没…...

【C语言】库函数常见的陷阱与缺陷(2):字符串转化函数

目录 一、atoi 函数 1.1. 功能与用法 1.2. 陷阱与缺陷 1.2.1. 输入验证不足 1.2.2. 溢出问题 1.3 安全替代 1.4. 代码示例 二、atof 函数 2.1. 功能与用法 2.2. 陷阱与缺陷 2.3. 安全使用建议 2.4. 代码示例 三、strtol 函数 3.1. 功能与用法 3.2. 陷阱与缺陷 …...

渗透测试基础

渗透测试基础是指对计算机系统、网络或应用程序进行模拟攻击&#xff0c;以发现其安全漏洞和潜在威胁的一种安全评估技术。通过模拟真实的攻击场景&#xff0c;渗透测试帮助组织了解其系统的安全弱点、验证防护措施的有效性&#xff0c;并提供改进建议。 渗透测试的核心概念 1…...

传奇996_53——后端ui窗口局部刷新

描述&#xff1a;一个大窗口&#xff0c;点击某个键&#xff0c;弹出小窗口。 小窗口中将msg存进变量中 大窗口中判断一个参数是否为null&#xff0c;如果不为null&#xff0c;说明界面不是第一次打开&#xff0c;而是被刷新了。就加上小窗口的那个变量 有时小窗口中还有其他…...

C++ constexpr vs const

笼统的讲 constexpr 主要用于编译时期&#xff0c;const用于运行时&#xff0c;但实际上两者都可以同时用于编译时期和运行时。 const const可以修饰全局变量&#xff0c;局部变量&#xff0c;函数参数&#xff0c;指针&#xff0c;引用&#xff0c;也可以修饰类成员函数&…...

【达梦数据库】存储过程调用实践案例-select

目录 前言创建表插入数据查询表中数据创建存储过程打开dbms_output包输出开关调用存储过程 前言 如果要在存储过程中执行一个SELECT语句并处理其结果&#xff0c;你不能直接使用EXECUTE IMMEDIATE&#xff0c;因为EXECUTE IMMEDIATE主要用于执行那些不返回行的语句&#xff08;…...

041_Compare_Matrix_Squre_Sum_in_MATLAB中矩阵平方和的比较

矩阵平方和的计算 矩阵平方和的定义 矩阵平方和的定义是对矩阵中的每一个元素进行平方&#xff0c;然后求和。 对于一个矩阵 A A A&#xff0c;其平方和定义为&#xff1a; sum ∑ i 1 m ∑ j 1 n A ( i , j ) 2 \text{sum} \sum_{i1}^{m}\sum_{j1}^{n} A(i,j)^2 sumi1∑…...

TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架

摘要 论文地址&#xff1a;https://arxiv.org/abs/2405.09308 源码地址&#xff1a;https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率&#xf…...

批处理读取文本第n行并赋值给变量?--遍历所有行并赋值给变量数组

::TraceLines.bat goto :test1http://www.bathome.net/thread-27229-1-1.html#批处理如何获取txt文本中某行某列的内容/指定行指定列的内容 http://www.bathome.net/thread-47304-1-1.html#如何用批处理读取文本第二行并赋值给变量&#xff1f; https://github.com/npocmaka/ba…...

嵌入式入门Day26

IO Day2 IO相关函数标准文件流指针缓冲区刷新时机作业 IO相关函数 time #include <time.h>time_t time(time_t *tloc);功能&#xff1a;返回1970年到现在的秒数参数&#xff1a;计算出来的秒数&#xff1b;返回值&#xff1b;成功返回1970年到现在的秒数&#xff0c;失…...

【Vue3项目实战系列一】—— 从零开始一个vue3项目 vue3+javascript+vite 非常详细 手把手教学

&#x1f609; 你好呀&#xff0c;我是爱编程的Sherry&#xff0c;很高兴在这里遇见你&#xff01;我是一名拥有十多年开发经验的前端工程师。这一路走来&#xff0c;面对困难时也曾感到迷茫&#xff0c;凭借不懈的努力和坚持&#xff0c;重新找到了前进的方向。我的人生格言是…...

Python_Flask04(牛马问答平台01)

项目名称&#xff1a;牛马问答平台 项目简介&#xff1a;1.主要用来给社会上的牛马们探讨老板的恶心之处。 2. 用来学习交流。 技术手段&#xff1a;Python3.x Flask render_template pymysql flask_sqlalchemy........ 注意该博客为迭代项目&#xff0c;于最后一期展示完整…...