Swagger接口文档 —— 手把手教学,全方位超详细小白能看懂,百分百能用Java版

news2024/11/16 16:37:11

🧸欢迎来到dream_ready的博客,📜相信您对博主首页也很感兴趣o (ˉ▽ˉ;)

博主首页,更多redis、java等优质好文以及各种保姆级教程等您挖掘!

目录

一、介绍

二、导入依赖

三、在配置类中加入 knife4j 相关配置

四、设置静态资源映射

五、注意放开拦截器拦截 

六、使用方式

常用注解

标记数据 

Controller

Model 

七、查看演示效果

八、设置全局都穿的参数 —— 例如token


一、介绍

使用Swagger你只需要按照它的规范去定义接口及接口相关的信息,就可以做到生成接口文档,以及在线接口调试页面。

官网:https://swagger.io/

Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案。

二、导入依赖

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

此处导入的是Knife4j,这是一个为MVC框架集成Swagger生成文档的解决方案 

三、在配置类中加入 knife4j 相关配置

亲爱的朋友,希望你不要告诉我你不会写配置类,不会配置类的话看文末最下面有最基础的配置类的教程,保证你能用上最好用的Swagger文档

是在配置类中添加下面内容哦

注意修改里面的一些内容,比如汉字部分以及那个扫描包的路径

    /**
     * 通过knife4j生成接口文档
     * @return
     */
    @Bean
    public Docket docket1() {
        log.info("准备生成接口文档...");
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("皮肤肿瘤分类项目接口文档")
                .version("2.0")
                .description("皮肤肿瘤分类项目接口文档")
                .build();
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .groupName("接口")
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.cvresume.controller"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

这个扫描包的路径切记要修改哦 

需要注意的是,这个方法可以设置多个,来使接口文档分页,只要方法名不重复即可

四、设置静态资源映射

设置静态资源映射,否则接口文档页面无法访问

也是在配置类中书写哦

下面这个基本是固定的,不用改,若你想玩一下Swagger的更多玩法,那么你可以去查阅官方文档

    /**
     * 设置静态资源映射
     * @param registry
     */
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        log.info("开始设置静态资源映射...");
        registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

五、注意放开拦截器拦截 

要注意拦截器拦截,比如如果你设置的有JWT校验,那么就要在配置拦截器那里放开下面这几个静态资源

"/swagger-resources/**", "/doc.html", "/webjars/**", "/v2/**", "/swagger-ui.html/**"

类似我这样写:

六、使用方式

其实你已经可以使用了,来进入这个页面看一下吧

当你在写配置的时候,需要指定一个扫描路径,它就会自动扫描所有接口,获取对应的数据,构建接口文档

浏览器输入下面这个地址

注意修改ip和端口号为你正在使用的,其他不变

http://127.0.0.1:8080/doc.html

只不过你会发现它没有备注,当你遇到很麻烦的数据的时候,根本不知道每个属性是干嘛的,这时候就需要使用注解了 

利用注解标记Controller和Model层对应的数据,然后利用这些标记的数据自动生成接口文档中对应数据的备注 

常用注解

通过注解可以控制生成的接口文档,使接口文档拥有更好的可读性,常用注解如下:

标记数据 

现在我对我的login接口进行改造,使其出现在接口文档上

我这里将原来和标记后的代码都进行了展示,主要是看注解,不要看我的逻辑代码,此篇博客只是为了让大家真正上手Swagger的使用

Controller

原来的:

标记后:

可以看到我用@Api标记了UserCroller这个类,用@ApiOperation标记了login这个方法

Model 

其实基本项目中的所有Model都要做标记,因为不一定啥时候用到,Model做标记的主要原因是让Swagger知道传来了什么参数(传对象时),或返回了什么参数

原来的:

@Data
public class User {
    private Integer id;
    private String username; // 用户名
    private String password; // 密码
    private String nickname; // 昵称
    private String avatarPath; // 头像路径
    private String sex; // 性别
    private String phone; // 电话
    private Integer role; // 角色
    private String hospital; // 医院名称
    private LocalDateTime createTime;
    private LocalDateTime updateTime;
}

标记后:

可以看到,我利用了@ApiModel标记实体类,用@ApiModelProperty标记属性

@Data
@ApiModel(description = "用户信息")
public class User {

    @ApiModelProperty(value = "用户ID")
    private Integer id;

    @ApiModelProperty(value = "用户名")
    private String username;

    @ApiModelProperty(value = "密码")
    private String password;

    @ApiModelProperty(value = "昵称")
    private String nickname;

    @ApiModelProperty(value = "头像路径")
    private String avatarPath;

    @ApiModelProperty(value = "性别")
    private String sex;

    @ApiModelProperty(value = "电话")
    private String phone;

    @ApiModelProperty(value = "角色")
    private Integer role;

    @ApiModelProperty(value = "医院名称")
    private String hospital;

    @ApiModelProperty(value = "创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty(value = "更新时间")
    private LocalDateTime updateTime;
}

然后因为我这个项目有一个统一返回的对象Result,所以我对Result也要用注解加个标记

原来的:

标记后:

七、查看演示效果

咱们来发送个请求:

点击调试,可以看到,需要传的参数直接给我们了,多么的方便呀

当时,参数值需要我们填哈哈

来我们再看一个,哪怕传来的是对象,他也应对自如

点击调试,我们只需要填写参数值即可

若你想全部都加上备注,就需要辛苦一下啦

说一个小窍门,丢给GPT,然后修改一下即可哈哈哈

八、设置全局都穿传的参数 —— 例如token

例如我这里

手动先发送个请求,获取登陆后的token

将token添加到“全局参数设置”这里

点击添加参数

这个时候你再发送任何请求,都会自动带上这个全局参数了

教程至此结束,这篇教程更适用于新手,Swagger进阶等我有空了会补充,但这篇博客足以满足大部分学习者了

🧸前路漫漫,愿星光与您相伴!

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

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

相关文章

图像分割:Pytorch实现UNet++进行医学细胞分割

图像分割&#xff1a;Pytorch实现UNet进行医学细胞分割 前言相关介绍项目结构具体步骤准备数据集读取数据集设置并解析相关参数定义网络模型定义损失函数定义优化器训练验证 参考 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…

应急响应-战中反制对抗上线CSGoby蚁剑Sqlmap等安全工具

知识点 战中-反制-安全工具篇CS反制(有版本限制) Goby反制&#xff08;有版本限制&#xff0c;新版goby已修复&#xff09; Antsword反制(有版本限制&#xff0c;别人也不一定用蚁剑) AWVS反制(有版本限制&#xff0c;在awvs 10版本存在&#xff09; BURP反制(有版本限制&…

git 删除本地分支 删除远程仓库中的分支

语法&#xff1a; 删除本地分支 git branch -D <分支名>删除远程分支 git push <remote名称> <分支名> --delete 示例&#xff1a; 删除本地分支 git branch -D feature/test_listview删除远程分支 git push origin feature/test_listview --delete 两个…

【计算机组成原理】加法器原理及其优化

苏泽 本专栏纯个人笔记作用 用于记录408 学习的笔记记录&#xff08;敲了两年码实在不习惯手写笔记了&#xff09; 如果能帮助到大家当然最好 但由于是工作后退下来备考 很多说法和想法都会结合实际开发的思想 可能不是那么的纯粹应试哈 希望大家挑选自己喜欢的口味食用…

推荐一个靠谱稳定适合单位和个人的媒体投稿平台

身为单位的信息宣传员,我肩负着每月完成对外信息宣传考核任务的重任。在这条道路上,我经历了从之初摸着石头过河,一家家联系媒体的艰辛,到如今使用智慧软文发布系统网站进行投稿发文章的轻松转变。 记得刚开始的时候,我对媒体投稿一窍不通。每次都要花费大量时间去搜索各种媒体…

Avi Wigderson:理论计算机科学的巨人

&#x1f3c6;个人专栏 &#x1f93a; leetcode &#x1f9d7; Leetcode Prime &#x1f3c7; Golang20天教程 &#x1f6b4;‍♂️ Java问题收集园地 &#x1f40d; Python工具 &#x1f334; 成长感悟 欢迎大家观看&#xff0c;不执着于追求顶峰&#xff0c;只享受探索过程 A…

【Kafka】Kafka Tool工具的使用

抖音视频 https://www.douyin.com/user/self?modal_id7123007128150901256&showTablike CSDN文档 https://blog.csdn.net/qq_43961619/article/details/109381849

WordPress JS Support Ticket插件 RCE漏洞复现

0x01 产品简介 WordPress和WordPress plugin都是WordPress基金会的产品。JS Support Ticket是使用在其中的一套开源票务系统插件。 0x02 漏洞概述 WordPress中的JS Support Ticket插件存在未经上传漏洞,未经身份验证的攻击者可以上传恶意脚本的服务器,执行任意指令,从而获…

【个人博客搭建】(8)全局异常处理

1、net 8 webapi 全局异常处理: 在 .NET 8 WebAPI 中&#xff0c;全局异常处理可以通过实现**IExceptionHandler接口或使用IAsyncExceptionFilter接口来完成**。 首先&#xff0c;关于IExceptionHandler接口&#xff0c;它是ASP.NET Core中用于全局异常处理的新抽象。这个接口有…

AUTOSAR OS Event讲解

Events介绍 在AUTOSAR系统中,event(事件)用于向任务发送信号信息。 事件可以为Extended task提供多个同步点,如下图: extended task可以等待事件,这将导致任务进入等待状态。当系统中的任务或ISR设置事件时,等待任务将进入就绪状态。 当它成为最高优先级的就绪任务时,…

低成本的云MES更合适中小企业

长期以来&#xff0c;面对激烈的竞争压力&#xff0c;我国传统的制造企业逐渐从大规模、低成本向多品种、小批量、定制化转型&#xff0c;逐步由粗放式管理向精益化管理靠拢&#xff0c;如ERP、CAD、PLM、OA等多个信息化系统已在我国制造企业中得到了较为广泛的应用&#xff0c…

Python介绍(未完)

文章目录 Python 背景知识Python 是谁创造的&#xff1f;Python 可以用来干什么&#xff1f;Python 的优缺点 搭建 Python 环境安装 Python搭建 PyCharm 环境新工具到手&#xff0c;赶紧试试中文设置第一个Python程序 Python基础语法基础语法&#xff08;1&#xff09;常量和表…

OpenCV-AMF算法(自适应中值滤波Adaptive Median Filtering)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 实现原理 AMF&#xff08;Adaptive Median Filter&#xff0c;自适应中值滤波&#xff09;是一种用于图像处理和信号处理的滤波算…

文献学习-35-用于评估血流储备分数的条件物理信息图神经网络

Conditional Physics-Informed Graph Neural Network for Fractional Flow Reserve Assessment Authors: Baihong Xie, Xiujian Liu, Heye Zhang, Chenchu Xu, Tieyong Zeng, Yixuan Yuan, Guang Yang, and Zhifan Gao Source: MICCAI 2023 Abstract 血流储备分数 (FFR) 的评…

linux 自定义命令/别名

参考资料 Linux(Ubuntu)自定义命令的使用Linux/Ubuntu系统自定义Shell命令Ubuntu/Linux 操作系统 自定义命令 目录 一. 为路径取别名二. 修改.profile文件2.1 .profile简介2.2 需求2.3 修改.profile文件 三. 创建软链接 一. 为路径取别名 ⏹需求&#xff1a;有一个work文件夹…

学习STM32第十六天

RTC实时时钟 一、简介 RTC是一个独立的BCD格式定时器&#xff0c;提供一个时钟日历&#xff0c;两个可编程报警中断&#xff0c;一个具有中断功能周期性可编程唤醒标志&#xff0c;RTC和时钟配置系统处于后备区域。 通过两个32位寄存器以BCD格式实现秒、分钟、小时&#xff08…

如何在阿里云主机上安装FreeBSD14系统

文章目录 在阿里云主机上安装FreeBSD14系统准备阿里云云主机识别目标磁盘下载 FreeBSD14解压缩 FreeBSD14系统镜像创建可启动的磁盘启动 FreeBSD14在阿里云主机上安装FreeBSD14系统 阿里云主机不支持 FreeBSD14 系统的镜像,因此需要手动进行安装。 准备阿里云云主机 在阿里云…

千锤百炼算法系列之动态规划

题外话 这段时间,我必须把算法弄明白 这篇直接讲解动态规划所有细节! 前面那篇 千锤百炼之每日算法(一)-CSDN博客 也有关于动态规划的讲解,也非常详细 很简单,我成尊不就是了?!!! 正题 动态规划 这里我们主要是让大家明白什么是动态规划,怎么用动态规划解题 我就不用…

数据结构之排序了如指掌(二)

目录 题外话 正题 选择排序 选择排序思路 选择排序代码详解 选择排序复杂度 双向选择排序 双向选择排序思路 双向选择排序代码详解 堆排序 堆排序思路 堆排序代码详解 堆排序复杂度 冒泡排序 冒泡排序思路 冒泡排序代码详解 冒泡排序复杂度 小结 题外话 今天…

2024年第十六届“华中杯”(A题)大学生数学建模挑战赛| 物理建模,多目标优化| 数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看华中杯 (A题&#xff09;&#xff01; CS团队倾…