7. 实现 API 自动生成

news2024/11/24 7:58:32

目录

1. pom.xml中引用依赖

2. 引入相关的依赖

3. 编写配置类

4. application.yml 中添加配置

5. API 常用注解 

6. 访问 API 列表

7. API 导入 Postman


使用 Springfox Swagger生成 API,并导入 Postman,完成API单元测试。
Swagger 简介:Swagger 是⼀套 API 定义的规范 ,按照这套规范的要求去定义接口及接口相关信息, 再通过可以解析这套规范工具,就可以生成各种格式的接口文档,以及在线接口调试页面,通过自动文档的方式,解决了接口文档更新不及时的问题。
Springfox 简介:是对 Swagger 规范解析并生成文档的⼀个实现。

1. pom.xml中引用依赖

统⼀管理版本,在 properties 标签中加入版本号:

<springfox-boot-starter.version>3.0.0</springfox-boot-starter.version>

3.0.0 版本对应 Spring Boot 2.6 之前的版本,但是随着 Spring Boot 的更新 Springfox 并没有进行同步的更新,所以存在一些兼容性问题,因此我们选择使用 SpringBoot 2.7.6 版本。

2. 引入相关的依赖

<!-- API⽂档⽣成,基于swagger2 -->
<dependency>
 <groupId>io.springfox</groupId>
 <artifactId>springfox-boot-starter</artifactId>
 <version>${springfox-boot-starter.version}</version>
</dependency>
<!-- SpringBoot健康监控 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

3. 编写配置类

  • 在com.bitejiuyeke.forum.config 包下新建SwaggerConfig.java
  • 解决 SpringBoot 2.6.0 以上与 Springfox3.0.0 不兼容的问题,涉及 SpringBoot 版本升级过程中的一 些内部实现变化,具体说明在修改配置文件部分

 将以下代码复制到 SwaggerConfig 类中:

package com.example.demo.controller;

import org.springframework.boot.actuate.autoconfigure.endpoint.web.CorsEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.endpoint.web.WebEndpointProperties;
import org.springframework.boot.actuate.autoconfigure.web.server.ManagementPortType;
import org.springframework.boot.actuate.endpoint.ExposableEndpoint;
import org.springframework.boot.actuate.endpoint.web.*;
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointsSupplier;
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
 * Swagger配置类
 */
// 配置类
@Configuration
// 开启Springfox-Swagger
@EnableOpenApi
public class SwaggerConfig {
    /**
     * Springfox-Swagger基本配置
     * @return
     */
    @Bean
    public Docket createApi() {
        Docket docket = new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }
    // 配置API基本信息
    private ApiInfo apiInfo() {
        ApiInfo apiInfo = new ApiInfoBuilder()
                .title("论坛系统API")
                .description("论坛系统前后端分离API测试")
                .contact(new Contact("Test",
                        "https://hello.fprum.com", "1111111111@qq.com"))
                .version("1.0")
                .build();
        return apiInfo;
    }
    /**
     * 解决SpringBoot 6.0以上与Swagger 3.0.0 不兼容的问题
     * 复制即可
     **/
    @Bean
    public WebMvcEndpointHandlerMapping
    webEndpointServletHandlerMapping(WebEndpointsSupplier webEndpointsSupplier,

                                     ServletEndpointsSupplier servletEndpointsSupplier,

                                     ControllerEndpointsSupplier controllerEndpointsSupplier,

                                     EndpointMediaTypes endpointMediaTypes, CorsEndpointProperties corsProperties,

                                     WebEndpointProperties webEndpointProperties, Environment environment) {
        List<ExposableEndpoint<?>> allEndpoints = new ArrayList();
        Collection<ExposableWebEndpoint> webEndpoints =
                webEndpointsSupplier.getEndpoints();
        allEndpoints.addAll(webEndpoints);
        allEndpoints.addAll(servletEndpointsSupplier.getEndpoints());
        allEndpoints.addAll(controllerEndpointsSupplier.getEndpoints());
        String basePath = webEndpointProperties.getBasePath();
        EndpointMapping endpointMapping = new EndpointMapping(basePath);
        boolean shouldRegisterLinksMapping =
                this.shouldRegisterLinksMapping(webEndpointProperties, environment,
                        basePath);
        return new WebMvcEndpointHandlerMapping(endpointMapping, webEndpoints,
                endpointMediaTypes,
                corsProperties.toCorsConfiguration(), new
                EndpointLinksResolver(allEndpoints, basePath),
                shouldRegisterLinksMapping, null);
    }
    private boolean shouldRegisterLinksMapping(WebEndpointProperties
                                                       webEndpointProperties, Environment environment,
                                               String basePath) {
        return webEndpointProperties.getDiscovery().isEnabled() &&
                (StringUtils.hasText(basePath)
                        ||
                        ManagementPortType.get(environment).equals(ManagementPortType.DIFFERENT));
    }
}

4. application.yml 中添加配置

  • 在 spring 节点下添加 mvc 配置项
由于 SpringBoot 2.6 之后版本把 SpringMVC 路径匹配策略修改为 MatchingStrategy. PATH_PATTERN_PARSER;
而 Springfox-Swagger 还没有更新版本,我们暂时先把 路径匹配策略回退到之前的
MatchingStrategy. ANT_PATH_MATCHER
 mvc:
   path match:
    matching-strategy: ANT_PATH_MATCHER #Springfox-Swagger兼容性配置

5. API 常用注解 

  •  @Api: 作用在 Controller 上,对控制器类的说明
    • tags="说明该类的作用,可以在前台界面上看到的注解"
  •  @ApiModel: 作用在响应的类上,对返回响应数据的说明
  •  @ApiModelProerty:作用在类的属性上,对属性的说明
  •  @ApiOperation: 作用在具体方法上,对 API 接口的说明
  •  @ApiParam: 作用在方法中的每⼀个参数上,对参数的属性进行说明

6. 访问 API 列表

启动程序,在浏览器中输入网址:http://127.0.0.1:58080/swagger-ui/index.html

可以正常运行并显示接口信息,说明配置成功,此时接口信息已经显示出来了,可以分别针每个接口进测试,具操作按页面指引即可。

点击“测试接口”出现如下图所示: 

选择对应的 API 列表,点击“Try it out”: 

点击 Execute: 

图中箭头所指方向即为测试结果。

带有参数的同样可以进行测试:

7. API 导入 Postman

获取 API 地址,打开 Swagger 页面的 API 资源地址并复制:

 在 Postman 中导入 url:

接下来输入参数:

 

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

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

相关文章

记录一个编译TubeTK时的报错:at_check问题

在使用如下命令安装TubeTK的cuda_nms时&#xff0c;报了一个错误&#xff0c;记录一下这个错误和解决办法 (base) redmeryredmery:~/Desktop/MOT/TubeTK/post_processing/nms$ python setup.py build_ext --inplace因为这个命令是在/home/redmery/Desktop/MOT/TubeTK/install/…

途乐证券-炒股开户流程是怎样的?

炒股是一种危险较大但收益也相对较高的出资方法&#xff0c;而开户则是出资炒股的前提。跟着科技的开展&#xff0c;炒股开户已经能够在线完结&#xff0c;但流程相对来说仍是比较繁琐的。那么&#xff0c;炒股开户流程是怎样的呢&#xff1f;下面从多个视点剖析。 一、炒股开户…

基于Servlet实现的管理系统(包含服务器源码+数据库)

资料下载链接 介绍 基于Servlet框架的管理系统 简洁版 &#xff1b; 实现 登录 、 注册 、 增 、 删 、 改 、 查 &#xff1b; 可继续完善增加前端、校验、其他功能等&#xff1b; 可作为 Servlet项目 开发练习基础模型&#xff1b; 课程设计 、 毕业设计 开发基础&…

PublicDNS服务提供商增加字节,将支持 DoH/DoT/DoQ 等协议

随着互联网的发展&#xff0c;网页的复杂程度也在增加。客户端在访问一个网页时&#xff0c;通常需要发送数十个 DNS 查询请求才能完整加载一个网页的全部资源。在这种情况下&#xff0c;DNS 解析的速度和准确率会影响网页的加载速度。 公共解析 PublicDNS 向用户提供 DNS 服务…

Android Studio导入项目需要做的一些配置

点击项目结构 选择本地安装的SDK、NDK目录 选择java版本 重新加载项目 Clean Project Rebuild Project 选择要构建的版本 可选debug和release 打包apk安装包 打包完成&#xff0c;就可以安装到安卓手机了

c语言——连接字符串

//连接字符串 #include<stdio.h> #include<stdlib.h> int main() {char s1[100],s2[100],i,j;printf("第一个字符串&#xff1a;");scanf("%s",s1);printf("第二个字符串&#xff1a;");scanf("%s",s2);for(i0;s1[i]!\0;i…

Android开发之性能优化:过渡绘制解决方案

1. 过渡绘制 屏幕上某一像素点在一帧中被重复绘制多次&#xff0c;就是过渡绘制。 下图中多个卡片跌在一起&#xff0c;但是只有第一个卡片是完全可见的。背后的卡片只有部分可见。但是Android系统在绘制时会将下层的卡片进行绘制&#xff0c;接着再将上层的卡片进行绘制。但其…

AgentBench:再谈何谓AI智能体?

除了具有完成特殊任务所需要的技能之外,AI智能体还可以根据人们的需要,训练出特别的个性。用过ChatGPT的读者应该都知道,虽然ChatGPT可以和我们流畅地进行交流,并且随着交流的深入,它可以根据用户的特点,在表述风格和习惯上作出一定的调整,但是从总体上看,它依然是沉闷…

vue 使用indexDB 简单完整逻辑

1 npm npm install idb 2 代码 <template><div><p>Data: {{ data }}</p><button click"fetchData">Fetch Data</button></div> </template><script> import { openDB } from idb;export default {data() {…

sid=‘*‘和sid=‘orcl1‘的区别--实战问题

客户有个11g rac环境&#xff0c;前一段时间db1内存故障了&#xff0c;更换后需要调整db1的sga和pga&#xff0c;操作如下 SQL> alter system set sga_target25G scopespfile sid*; System altered. SQL> alter system set sga_max_size25G scopespfile sid*; Syste…

flowable流程部署只生成了act_re_deployment,未生成act_re_procdef

绘制的流程图 使用错误检测功能 没有检测到错误 下载后重名vacation.bpmn201.xml部署。 /*** 流程部署*/Testpublic void testDeploy() {//1.获取ProcessEngine对象ProcessEngine processEngine ProcessEngines.getDefaultProcessEngine();//2、获取RepositoryServiceReposi…

【面试高频题】难度 3/5,字典树热门运用题

题目描述 这是 LeetCode 上的 「745. 前缀和后缀搜索」 &#xff0c;难度为 「困难」。 Tag : 「字典树」 设计一个包含一些单词的特殊词典&#xff0c;并能够通过前缀和后缀来检索单词。 实现 WordFilter 类&#xff1a; WordFilter(string[] words) 使用词典中的单词 words 初…

PyTorch学习笔记(十三)——现有网络模型的使用及修改

以分类模型的VGG为例 vgg16_false torchvision.models.vgg16(weightsFalse) vgg16_true torchvision.models.vgg16(weightsTrue) print(vgg16_true) vgg16_true.classifier.add_module("add_linear",nn.Linear(1000,10)) print(vgg16_true) vgg16_false.classifie…

mysql的快速复习 和一些思考记录

数据库设计 第一范式&#xff1a;有主键&#xff0c;具有原子性&#xff0c;字段不可分割 数据库表中不能出现重复记录&#xff0c;每个字段是原子性的不能再分 关于第一范式&#xff0c;每一行必须唯一&#xff0c;也就是每个表必须有主键。 每一列不可再分&#xff01;&#…

C++之ostream与ifstream读写文件操作(一百八十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

「2024」预备研究生mem-论证推理强化:引入前提(下)

一、论证推理强化&#xff1a;引入前提&#xff08;下&#xff09; 二、课后题

基于JAVA的仓库管理系统java库房仓储进销存jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于JAVA的仓库管理系统 系统有2权限&#xff1a;用户…

医院智慧配电能效平台系统的建设与实践

摘 要&#xff1a;为降低医院建筑能耗&#xff0c;通过将精细化管理引入医院建筑能源系统&#xff0c;细化分析医院能耗特点和能源管理流程&#xff0c;设计决策过程和构建评价标准&#xff0c;形成能源系统精细化管理体系。以广州市番禺中心医院为例&#xff0c;通过建立能效评…

【JavaScript】使用js实现滑块验证码功能与浏览器打印

滑块验证码 效果图&#xff1a; 实现思路&#xff1a; 根据滑块的最左侧点跟最右侧点&#xff0c; 是否在规定的距离内【页面最左侧为原点】&#xff0c;来判断是否通过 html代码&#xff1a; <!DOCTYPE html> <html><head><title>滑动图片验证码&…

视觉中国又“翻车”,但其2023年H1净利润暴涨近80%!

大数据产业创新服务媒体 ——聚焦数据 改变商业 一个体量并不大的公司&#xff0c;多次惹众怒&#xff0c;公司却依然活的很好。这样的公司到底是如何经营的呢&#xff1f;这不禁让人好奇。 对于广大媒体尤其是自媒体而言&#xff0c;视觉中国是一个特殊的名字。也因其“独特”…