Java的Mvc整合Swagger的knife4框架

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所包含的参数里面给其添加的信息,这也更加方便我们开发时对于项目的检查和理解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

共筑数字安全防线,2024开源和软件安全沙龙即将启幕

随着数字化转型进程的加快以及开源代码的广泛应用&#xff0c;开源凭借平等、开放、协作、共享的优秀创作模式&#xff0c;逐渐成为推动数字技术创新、加速传统行业转型升级的重要模式。但随着软件供应链日趋复杂多元&#xff0c;使得其安全风险不断加剧&#xff0c;针对软件供…

SAP导出表结构并保存到Excel 源码程序

SAP导出表结构并保存到Excel,方便写代码时复制粘贴 经常做接口,需要copy表结构,找到了这样一个程程,特别有用。 01. 先看结果

LDR6500:音频双C支持,数字与模拟的完美结合

在当今数字化快速发展的时代&#xff0c;音频设备的兼容性和性能成为了用户关注的重点。LDR6500&#xff0c;作为乐得瑞科技精心研发的USB Power Delivery&#xff08;PD&#xff09;协议芯片&#xff0c;凭借其卓越的性能和广泛的应用兼容性&#xff0c;为音频设备领域带来了新…

Linux下mysql环境的搭建

1.mysql的下载 去MySQL官网下载mysql的linux压缩包 MySQL :: Download MySQL Community Server 如果下载慢请到网盘中自行下载 通过网盘分享的文件&#xff1a;mysql-8.0.40-1.el7.x86_64.rpm-bundle.tar 链接: https://pan.baidu.com/s/1vUJ-VuTwer1nLPT-haQCqw?pwd6342 提…

可视化建模以及UML期末复习篇----UML图

这是一篇相对较长的文章&#xff0c;如你们所见&#xff0c;比较详细&#xff0c;全长两万字。我不建议你们一次性看完&#xff0c;直接跳目录找你需要的知识点即可。 --------欢迎各位来到我UML国&#xff01; 一、UML图 总共有如下几种&#xff1a; 用例图&#xff08;Use Ca…

jenkins邮件的配置详解

Jenkins邮件的配置涉及多个步骤和细节,以下是详细的配置指南: 一、前期准备 确定邮件服务:明确Jenkins将要使用的邮件服务,如QQ邮箱、163邮箱、公司邮箱(基于Microsoft 365或Exchange Server)等。获取SMTP配置信息:根据邮件服务类型,获取相应的SMTP服务器地址、端口号…

JaveEE初阶--网络编程套接字

目录 一、引言 二、网络编程基本概念 2.1 什么是网络编程&#xff1f; 2.2 基本知识 三、Socket套接字 3.1 概念 3.2 分类 1.流套接字&#xff1a;使用传输层TCP协议 2. 数据报套接字&#xff1a;使用传输层UDP协议 3.原始套接字&#xff1a;用于自定义传输层协议 四、…

Python爬虫——HTML中Xpath定位

Xpath是一种路径查询语言。利用一个路径表达式从html文档中找到我们需要的数据位置&#xff0c;进而将其写入到本地或者数据库中。 学习Xpath爬虫&#xff0c;我们首先学习一下python中lxml库 关于库 lxml 终端下载Xpath需要用到的模块 pip install lxml 关于HTML 超文本标…

Spring Cloud Alibaba 之 “Sentinel”

从网上下载好sentinel-dashboard-1.6.3.jar&#xff0c;然后执行 java -jar sentinel-dashboard-1.6.3.jar,执行成功之后在浏览器输入localhost:8080&#xff0c;Sentinel的登录名和密码都是sentinel,登陆成功之后看到只有一个首页。 接下来开始整合Spring Cloud Alibaba Sen…

伟测科技再融资11.75亿:增收不增利,毛利率近年来持续下滑

《港湾商业观察》施子夫 王璐 12月9日&#xff0c;上海证券交易所上市审核委员会召开2024年第34次上市审核委员会审议会议&#xff0c;审议上海伟测半导体科技股份有限公司(再融资)&#xff08;以下简称&#xff0c;伟测科技&#xff1b;688372.SH&#xff09;事项。 今年8月…

Postman cURL命令导入导出

你是否曾为在Postman和终端之间切换、整理请求而抓狂&#xff1f;其实&#xff0c;Postman支持与cURL命令的无缝互通&#xff0c;通过导入导出&#xff0c;极大提升效率。用好这个功能&#xff0c;分分钟让接口测试更高效&#xff01; Postman如何快速导入cURL命令&#xff1f;…

MR30分布式 I/O 模块助力 CNC 设备产能飞跃

背景分析 在现代制造业中&#xff0c;CNC 设备扮演着极为关键的角色。然而&#xff0c;CNC 设备在运行过程中也存在着诸多痛点。传统的 CNC 设备往往在控制与通信方面存在局限&#xff0c;其内部的 I/O 系统大多采用集中式架构。这种架构下&#xff0c;一旦需要处理大量的输入输…

《ODIN: A Single Model for 2D and 3D Segmentation》CVPR2024

斯坦福和微软&#xff1a; 代码链接&#xff1a;ODIN: A Single Model For 2D and 3D Perception 论文链接&#xff1a;2401.02416 摘要 这篇论文介绍了ODIN&#xff08;Omni-Dimensional INstance segmentation&#xff09;&#xff0c;一个能够同时处理2D RGB图像和3D点云…

从视觉到雷达:多模态感知如何引领自动驾驶安全革命

文章目录 摘要引言多模态感知融合的原理与架构感知技术的特点多模态感知融合的目标 数据融合实现示例代码结构与主要组件模型定义 MultimodalFusionModel前向传播&#xff08;forward 方法&#xff09;模型细节剖析实践应用 QA环节总结参考资料 摘要 本文探讨了多模态感知技术…

uniapp结合movable-area与movable-view实现拖拽功能

前言 因为公司业务开发需要拖拽功能。 ps&#xff1a;该功能只能针对高度一致的&#xff0c;如果高度不一致需要另外二开 演示 开始 <template><view style"height: 100%;"><movable-area :style"{width: 100%, height: allHeight px}"…

ElasticSearch如何做性能优化?

大家好&#xff0c;我是锋哥。今天分享关于【ElasticSearch如何做性能优化&#xff1f;】面试题。希望对大家有帮助&#xff1b; ElasticSearch如何做性能优化&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在 Elasticsearch 中&#xff0c;性能优化是…

AI开发: 知识图谱的初识,学会制作知识图谱- Python 机器学习

一、知识图谱的概念 知识图谱是一个通过图结构来表示和组织知识的工具&#xff0c;它将事物、概念和它们之间的关系以图的形式呈现出来&#xff0c;图中的节点代表实体&#xff08;比如人物、地点、事件等&#xff09;&#xff0c;而边代表这些实体之间的各种关系&#xff08;…

软考高级难度排名,哪个科目容易过?

软考高级五个科目&#xff0c;哪个比较好考&#xff1f;今天就来和大家聊一聊~ 一、软考高级科目设置 高级科目包含&#xff1a;信息系统项目管理师、系统分析师、系统架构设计师、网络规划师以及系统规划与管理师5个科目。 1. 信息系统项目管理师 信息系统项目管理师&#…

浅谈网络 | 应用层之云网络隔离GRE/VXLAN

目录 前言GRE 隧道技术VXLANGRE/VXLAN接入云平台 前言 之前提到&#xff0c;为云平台中的租户实现隔离时&#xff0c;常用的策略是基于 VLAN。然而&#xff0c;VLAN 只有 12 位&#xff0c;共支持 4096 个 ID&#xff0c;这在最初设计时看似足够&#xff0c;但随着云计算的快速…

上海交通大学《2024年816自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《上海交通大学816自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题