SpringBootWeb 篇-入门了解 Swagger 的具体使用

news2024/12/30 1:06:16

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 Swagger 介绍

        1.1 Swagger 和 Yapi 的使用场景

        2.0 Swagger 的使用方式

        2.1 导入 knife4j 的 maven 坐标

        2.2 在配置类中加入 knife4j 相关配置

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

        2.4 完整 Swagger 的配置代码

        3.0 Swagger 常见的注解


        1.0 Swagger 介绍

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

        knife4j 是为 Java MVC 框架集成 Swagger 生成 Api 文档的增强解决方案。Swagger 允许定义 API 的各种方面,包括输入参数、请求和响应的数据格式、接口路径等内容。同时, Swagger 提供了一个交互式的 Swagger UI ,可以直观地查看和测试 API 。

        简单来说,就是 Swagger 框架可以根据已经实现的方法或者类,通过页面的方式直观清晰的查看或者进行测试该方法。

        1.1 Swagger 和 Yapi 的使用场景

        1)Yapi 是设计阶段使用的工具,管理和维护接口。

        2)Swagger 在开发阶段使用的框架,帮助后端开发人员的接口测试。

        2.0 Swagger 的使用方式

        首先通过导入 knife4j 的 maven 坐标,再在配置类中加入 knife4j 相关配置,最后设置静态资源映射。

        2.1 导入 knife4j 的 maven 坐标

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

        2.2 在配置类中加入 knife4j 相关配置

        首先创建一个配置类,在普通类上加上 @Configuration 注解,且该类需要继承 WebMvcConfigurationSupport 类。

        再定义一个返回 Docket 的 docket 方法,且该方法需要加上 @Bean 注解,使其交给 IOC 容器管理,成为 Bean 对象。

        在该 docket 方法中先创建一个 ApiInfo 对象,通过 apiInfo 的一些方法来设置属性,再创建一个 Docket 对象,通过 docket 的一些方法来设置属性,再将设置好的 docket 对象返回。

代码如下:

    @Bean
    public Docket docket() {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("项目接口文档")
                .version("2.0")
                .description("项目接口文档")
                .build();
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("需要扫描的项目名"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

        其中设置 apis(RequestHandlerSelectors.basePackage("需要扫描的项目名")) 该属性是很重要的,项目中要测试的方法或者类在具体包的包名。这样就会自动扫描该包及其子包的方法或者类。

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

        重写配置类中的 addResourceHandlers 方法,通过该资源路径 "/doc.html" 来访问该页面。 

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

        2.4 完整 Swagger 的配置代码


/**
 * 配置类,注册web层相关组件
 */
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {

    /**
     * 通过knife4j生成接口文档
     * @return
     */
    @Bean
    public Docket docket() {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("项目接口文档")
                .version("2.0")
                .description("项目接口文档")
                .build();
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo)
                .select()
                .apis(RequestHandlerSelectors.basePackage("需要测试方法所在项目的包名"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }

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


}

具体的页面效果:

        通过访问 "/doc.html" 的资源路径,就可以访问到该页面,通过该页面就可以非常方便测试这些方法了。

补充:

        若要使用 .built 来创建对象,你需要导入 Lombok 这个库的 Maven 坐标。在 Maven 项目中,你可以在 pom.xml 文件中添加以下依赖项:

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.20</version>
</dependency>

        实际上,使用 .builder 创建对象是针对 Lombok 中的 @Builder 注解的功能。要使用 Lombok 的 @Builder 注解创建对象,你需要在你的Java类中添加 @Builder 注解,而不是导入特定的 Lombok 库的 Maven 坐标。

        3.0 Swagger 常见的注解

        通过注解可以控制生成的接口文档,使用接口文档拥有更好的可读性。简单来说,通过这些注解就可以对类、方法、方法中的属性进行说明,在测试方法的过程中,可以很清晰的明白该方法或者类的用途、信息。

常用注解如下:

        1)@Api("tags=对类的描述"):用在类上,比如 Controller ,表示对类的说明。

代码如下:

效果如下: 

        2)@ApiModel(description="对实体类进行描述"):用在实体类上,比如 entity、DTO、VO 。

代码如下:

@Data
@ApiModel(description = "员工登录时传递的数据模型")
public class EmployeeLoginDTO implements Serializable {

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

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

}

效果如下:
 

        3)@ApiModelProperty("对属性进行描述"):用在属性上,描述属性信息。

代码如下:

@Data
@ApiModel(description = "员工登录时传递的数据模型")
public class EmployeeLoginDTO implements Serializable {

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

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

}

效果如下:

        4)@ApiOperation("对方法进行描述"):用在方法上,例如 Controller 的方法,说明方法的用途、作用。

代码如下:

    @PostMapping
    @ApiOperation("新增员工")
    public Result<String> save(@RequestBody EmployeeDTO employeeDTO){
        log.info("新增员工");
        employeeService.save(employeeDTO);

        return Result.success();
    }

效果如下:

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

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

相关文章

「案例分析」不同发展阶段非人力资源部门的人力资源管理职能

引言&#xff1a; 企业人力资源管理应该是公司全体管理人员都应该承担的责任&#xff0c;是所有管理者日常工作的重要组成成分&#xff0c;非人力资源部门经理&#xff0c;作为公司的重要管理者&#xff0c;也应该参与公司人力资源管理活动&#xff0c;协调配合人力资源部门做…

2024年7月好用的图纸加密软件丨图纸加密软件分享

图纸加密是企业保护技术资产和知识产权的关键措施之一。随着信息技术的飞速发展&#xff0c;图纸作为企业核心竞争力的表现形式&#xff0c;其安全性越来越受到重视。图纸一旦泄露&#xff0c;不仅可能导致企业产品被模仿&#xff0c;市场份额受损&#xff0c;还可能引发法律风…

AI大模型推理过程与优化技术深度剖析

在人工智能的浩瀚星空中&#xff0c;AI大模型以其卓越的性能和广泛的应用前景&#xff0c;成为了推动技术进步的璀璨明星。本文旨在深入探讨AI大模型的推理过程及其背后的优化技术&#xff0c;为理解这一复杂而精妙的技术体系提供一个清晰的视角。 一、AI大模型的推理过程揭秘 …

昇思25天学习打卡营第二十天|基于MobileNetv2的垃圾分类

背景 提供免费算力支持&#xff0c;有交流群有值班教师答疑的华为昇思训练营进入第二十天了。 今天是第二十天&#xff0c;从第十天开始&#xff0c;进入了应用实战阶段&#xff0c;前九天都是基础入门阶段&#xff0c;具体的学习内容可以看链接 基础学习部分 昇思25天学习打卡…

Avalonia创建导航菜单

1. 简介 已开源&#xff0c;后续还会继续更新学习到的内容&#xff0c;欢迎Star&#xff0c;GitHub地址 开发Avalonia需要的一些资料&#xff0c;我已经分享到另一篇文章 示意图 涉及到内容&#xff1a; MVVM路由模板 开发&#xff1a; 开发工具&#xff1a;Rider&#x…

Kithara与OpenCV (一)

Kithara使用 OpenCV 库 目录 Kithara使用 OpenCV 库简介需求和支持的环境构建 OpenCV 库使用 CMake 进行配置以与 Kithara 一起工作 使用 OpenCV 库设置项目运行 OpenCV 代码图像采集和 OpenCV自动并行化限制和局限性1.系统建议2.实时限制3.不支持的功能和缺失的功能4.显示 Ope…

Mac数据恢复篇:Mac照片恢复工具

由于更新错误、意外删除或数据覆盖&#xff0c;照片可能会从 Mac 上消失。当您忘记在Mac上启用iCloud时&#xff0c;您也可能会丢失它们。 幸运的是&#xff0c;有多种方法可以从Mac恢复丢失或删除的照片&#xff1a;使用备份文件夹或专业的Mac照片恢复软件。但是&#xff0c;如…

暑期备考2024上海初中生古诗文大会:单选题真题和独家解析

现在距离2024年初中生古诗文大会初选还有不到4个月&#xff08;11月3日正式开赛&#xff09;&#xff0c;我们继续来看10道选择题真题和详细解析。为帮助孩子自测和练习&#xff0c;题目的答案和解析统一附后。 本专题持续分享。 一、上海初中古诗文大会历年真题精选(参考答案…

VS Code 代码格式化插件,代码美观的插件

背景&#xff1a; 前端代码格式化插件有很多&#xff0c;不同的编辑器和集成开发环境&#xff08;IDE&#xff09;通常会有不同的插件。以下是一些常用的前端代码格式化工具及其特点&#xff1a; 代码更加美观&#xff0c;可以使用工具来实现。常用的工具有Pretter、vuter、ES…

gitlab 搭建使用

1. 硬件要求 ##CPU 4 核心500用户 8 核心1000用户 ##内存 4 G内存500用户 8 G内存1000用户 2. 下载 链接 3. 安装依赖 yum -y install curl openssh-server postfix wget 4. 安装gitlab组件 yum -y localinstall gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm 5. 修改配置文…

低成本,高性能:10 万美元实现Llama2-7B级性能

高性能的语言模型如Llama2-7B已经成为推动自然语言处理技术进步的重要力量。然而&#xff0c;这些模型往往需要昂贵的计算资源和庞大的研发投入&#xff0c;使得许多研究团队和小型企业望而却步。现在&#xff0c;JetMoE架构以其创新的设计和优化策略&#xff0c;不仅成功地在只…

算法复杂度<数据结构 C版>

什么是算法复杂度&#xff1f; 简单来说算法复杂度是用来衡量一个算法的优劣的&#xff0c;一个程序在运行时&#xff0c;对运行时间和运行空间有要求&#xff0c;即时间复杂度和空间复杂度。 目录 什么是算法复杂度&#xff1f; 大O的渐近表达式 时间复杂度示例 空间复杂度…

探索数据结构与算法的奇妙世界 —— Github开源项目推荐《Hello 算法》

在浩瀚的编程与计算机科学领域中&#xff0c;数据结构与算法无疑是每位开发者攀登技术高峰的必经之路。然而&#xff0c;对于初学者而言&#xff0c;这条路往往布满了荆棘与挑战。幸运的是&#xff0c;今天我要向大家推荐一个令人振奋的项目——《Hello Algo》&#xff0c;它正…

VSCode remote无法链接

报错信息如下&#xff1a; 远程主机密钥变化导致验证失败 无法连接 解决措施&#xff1a; 删除C:\Users\username.ssh\known_hosts中旧的主机密钥条目&#xff0c;重新连接

使用java实现快速排序算法的性能测试

Date: 2024.07.12 16:32:32 author: lijianzhan **简述&#xff1a;**在我的上一篇文章中简单的提到过算法&#xff0c;关于算法&#xff0c;现在再次的说明一下&#xff0c;算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程&#xff0c;一个算法的质量优…

mindspore打卡第24天之LSTM+CRF序列标注

LSTMCRF序列标注 概述 序列标注指给定输入序列&#xff0c;给序列中每个Token进行标注标签的过程。序列标注问题通常用于从文本中进行信息抽取&#xff0c;包括分词(Word Segmentation)、词性标注(Position Tagging)、命名实体识别(Named Entity Recognition, NER)等。以命名实…

力扣 爬楼梯

动态规划算法基础篇。 class Solution {public int climbStairs(int n) {int[] f new int[n 1];f[0] 1;f[1] 1;//当爬到n阶楼梯时&#xff0c;可知是由n-1阶或n-2阶楼梯而来for(int i 2; i < n; i) {f[i] f[i - 1] f[i - 2];//后面的每一阶种数由前两个状态得到}ret…

浪涌测试标准

IEC定义的浪涌标准主要包括以下几个方面&#xff1a;‌ 电源浪涌测试标准&#xff1a;‌ IEC 61000-4-11规定了如何进行电源电压变化测试&#xff0c;‌以评估设备在电源电压变动时的抗干扰性能。‌IEC 61000-4-13规定了如何进行电源瞬态间隔测试&#xff0c;‌以评估设备在电源…

计网-三次握手和四次挥手

TCP建立和断开连接的过程&#xff08;三次握手和四次挥手&#xff09; TCP通信的过程&#xff1a; 问题&#xff1a;tcp是如何保证数据在客户端和服务端之间通信传输的&#xff1f; 分为三个步骤&#xff1a;三次握手&#xff0c;传输数据确认&#xff0c;四次挥手。三次握手…

内容管理(C++)

文章目录 new 和 delete对于内置类型对于自定类型 operator new 和 operator deletenew 可以抛异常 new[] 和 delete[]&#xff08;补充&#xff09;定位new总结 以下测试都是在 VS2019环境下测试。 new 和 delete 对于内置类型 在C语言中&#xff0c;我们动态开辟内存用的是…