Spring Boot 2.7.5 整合 Swagger 3 实现可交互的后端接口文档

news2024/11/28 16:52:53

文章目录

  • 前言
  • 集成
  • 访问
  • 代码
  • 参考文献

前言

问: 什么是 OpenAPI?

答: OpenAPI 规范(OAS),是定义一个标准的、与具体编程语言无关的RESTful API的规范。OpenAPI 规范使得人类和计算机都能在“不接触任何程序源代码和文档、不监控网络通信”的情况下理解一个服务的作用。

问: 什么是 Swagger?

答: Swagger 是一组围绕 OpenAPI 规范构建的开源工具,可以帮助您设计、构建、记录和使用 REST API。

主要的Swagger工具包括:

  • Swagger Editor: 基于浏览器的编辑器,可以在其中编写 OpenAPI 定义。
  • Swagger UI: 将 OpenAPI 定义呈现为交互式文档。
  • Swagger Codegen: 从 OpenAPI 定义生成调用代码。
  • Swagger Editor Next (beta): 基于浏览器的编辑器,您可以在其中编写和查看 OpenAPI 和 AsyncAPI 定义。
  • Swagger Core: 用于创建、使用和使用 OpenAPI 定义的 Java 相关库。
  • Swagger Parser: 用于解析 OpenAPI 定义的独立库
  • Swagger APIDom: 提供单一的统一结构,用于跨各种描述语言和序列化格式描述 API。

集成

  1. 初始 Spring Boot 项目
  2. pom.xml 引入依赖
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-boot-starter</artifactId>
        <version>3.0.0</version>
    </dependency>
    
  3. 编写 SwaggerConfig 配置类
     package com.example.demo.config;
    
     import org.springframework.beans.factory.annotation.Value;
     import org.springframework.context.annotation.Bean;
     import org.springframework.context.annotation.Configuration;
     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;
    
     /**
     * @Author: 高建伟
     * @Date: 2022/11/22
     * @Description: SwaggerConfig
     */
     @Configuration
     @EnableOpenApi
     public class SwaggerConfig {
    
         /**
         * 用于读取配置文件 application.properties 中 swagger 属性是否开启
         */
         @Value("${swagger.enabled}")
         private Boolean swaggerEnabled;
    
         @Bean
         public Docket docket() {
             return new Docket(DocumentationType.OAS_30)
                     .apiInfo(apiInfo())
                     // 是否开启swagger
                     .enable(swaggerEnabled)
                     .select()
                     // 过滤条件,扫描指定路径下的文件
                     .apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
                     // 指定路径处理,PathSelectors.any()代表不过滤任何路径
                     //.paths(PathSelectors.any())
                     .build();
         }
    
         private ApiInfo apiInfo() {
             /*作者信息*/
             Contact contact = new Contact("高建伟", "https://blog.csdn.net/Gjw_java?type=blog", "jianweigao19@163.com");
             return new ApiInfo(
                     "Spring Boot 集成 Swagger3 测试",
                     "Spring Boot 集成 Swagger3 测试接口文档",
                     "v1.0",
                     "https://blog.csdn.net/Gjw_java?type=blog",
                     contact,
                     "Apache 2.0",
                     "http://www.apache.org/licenses/LICENSE-2.0",
                     new ArrayList()
             );
         }
     }
    
    
  4. 控制器中使用
    package com.example.demo.controller;
    
    import com.example.demo.entity.TestDict;
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import io.swagger.annotations.ApiParam;
    import org.springframework.web.bind.annotation.*;
    
    /**
    * @Author: 高建伟
    * @Date: 2022/11/22
    * @Description:
    */
    @RestController
    @RequestMapping("/test")
    @Api(tags = "测试控制器")
    public class TestController {
    
        @ApiOperation("测试接口")
        @GetMapping("/hello")
        public String hello(){
            return "Hello world";
        }
    
        @ApiOperation("保存测试字典接口")
        @PostMapping("/saveDict")
        public String saveDict(@ApiParam(value = "id", required = true, example = "123456") @RequestBody TestDict testDict){
            return testDict.toString();
        }
    }
    
  5. 实体中使用
    package com.example.demo.entity;
    
    import io.swagger.annotations.ApiModel;
    import io.swagger.annotations.ApiModelProperty;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
    * @Author: 高建伟
    * @Date: 2022/11/22
    * @Description:
    */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ApiModel("测试字典类")
    public class TestDict {
    
        @ApiModelProperty("主键")
        private String id;
        @ApiModelProperty("字典类型")
        private String dictType;
        @ApiModelProperty("字典值")
        private String dictValue;
        @ApiModelProperty("字典key")
        private String dictKey;
        @ApiModelProperty("备注")
        private String remark;
    }
    

访问

访问地址:http://localhost:8080/swagger-ui/index.html

swagger3_run_image

代码

点击获取测试代码

参考文献

Swagger 3.0 官方文档

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

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

相关文章

智能音箱中采用的数字音频功放

智能改变生活&#xff0c;随高科技的发展智能科技已经融入我们生活当中&#xff0c;智能家居和IOT物联网的发展越来越深入人心&#xff0c;从手机到家电在到家居因为智能化而都在慢慢的改变&#xff1b;智能音响&#xff0c;足不出户&#xff0c;看尽大千世界&#xff1b;一屋一…

《RO 仙境传说》 Game Jam 获奖名单公布!

一睹获胜者的作品吧&#xff5e; 《RO 仙境传说》Game Jam 已经圆满结束&#xff01;许多社区成员都创造了非常棒的体验。 祝贺所有获奖者&#xff0c;并感谢每一位参与并分享了想法的用户。 接下来将公布综合优秀奖、最佳创意奖和最佳设计奖的得主&#xff01;获奖名单是由 Th…

第 21 章 InnoDB Cluster

第21章 InnoDB Cluster 文章目录第21章 InnoDB Cluster本章介绍 MySQL InnoDB Cluster &#xff0c;它整合了 MySQL 多项技术&#xff0c;使您能够部署和管理 MySQL 的完整集成的高可用解决方案。本内容是 InnoDB Cluster 的高级概述&#xff0c;有关完整文档&#xff0c;请参阅…

面试了个阿里P7程序员,他让我见识到什么才是“精通高并发与调优”

蓦然回首自己做开发已经十年了&#xff0c;这十年中我获得了很多&#xff0c;技术能力、培训、出国、大公司的经历&#xff0c;还有很多很好的朋友。但再仔细一想&#xff0c;这十年中我至少浪费了五年时间&#xff0c;这五年可以足够让自己成长为一个优秀的程序员&#xff0c;…

二叉树操作集锦(递归遍历,非递归遍历,求深度,结点个数,完全二叉树等)

二叉树操作集锦&#xff08;递归遍历&#xff0c;非递归遍历&#xff0c;求深度&#xff09; 二叉树操作集锦&#xff08;递归遍历&#xff0c;非递归遍历&#xff0c;求深度&#xff09;一、二叉树操作集锦1.1 二叉树定义1.2 二叉树创建1.3 二叉树遍历1.3.1 二叉树递归遍历1.3…

【JAVA程序设计】基于SSM的电影院在线购票系统-沙箱支付

基于SSM的电影院在线购票系统-沙箱支付项目获取项目简介开发环境项目技术功能结构运行截图项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 项目简介 本项目是基于SSM的影院购票系统,本项…

【花雕动手做】有趣好玩的音乐可视化系列项目(32)--P10矩阵LED单元板

偶然心血来潮&#xff0c;想要做一个音乐可视化的系列专题。这个专题的难度有点高&#xff0c;涉及面也比较广泛&#xff0c;相关的FFT和FHT等算法也相当复杂&#xff0c;不过还是打算从最简单的开始&#xff0c;实际动手做做试验&#xff0c;耐心尝试一下各种方案&#xff0c;…

线程,互斥锁,临界区

目录1.线程概念2.windows的线程和linux的线程的区别3虚拟地址到地址空间的转换4.线程优缺点1.优点2.缺点5.进程控制1.创建线程2.线程出现异常了怎么办&#xff1f;进程健壮性问题3.join的第二参数如何理解4.线程终止时6.如果理解pthread_t7.三个概念6.互斥锁1.关于临界区的一点…

【设计模式】 - 结构型模式 - 装饰者模式

装饰者模式 概述 指在不改变现有对象结构的情况下&#xff0c;动态地给该对象增加一些职责&#xff08;即增加其额外功能&#xff09;的模式。 装饰者与被装饰者拥有共同的超类&#xff0c;继承的目的是继承类型&#xff0c;而不是行为 结构 Component&#xff1a;可以是接…

膜拜,Alibaba最新发布SprinBoot:进阶原理实战与面试题分析指南

为什么要写这本书&#xff1f; 我们知道&#xff0c;Spring Boot是一个集成性的开源框架&#xff0c;内部整合了很多第三方组件和框架。这些组件和框架应用如此之广泛&#xff0c;以至于大家反而往往对如何更好地使用Spring Boot自身的功能特性并不是很重视。事实上&#xff0…

CubeMX+VSCode+Ozone的STM32开发工作流(一)背景知识介绍

neozng1hnu.edu.cn TODO&#xff1a;1. 添加一键编译启用ozone调试/一键编译下载的脚本&#xff0c;使得整个进一步流程自动化2. 增加更多的背景知识介绍3. 增加VSCode下RTT viewer的支持和一键下载(不进入调试)的支持前言 了解过嵌入式开发的你一定接触过Keil&#xff0c;这款…

[附源码]java毕业设计校园求职与招聘系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

单克隆抗体WuT9/甘草次酸-氟尿嘧啶偶联顺铂/RGD肽修饰聚谷氨酸-顺铂复合物的制备

小编下面整理了单克隆抗体WuT9/甘草次酸-氟尿嘧啶偶联顺铂/RGD肽修饰聚谷氨酸-顺铂复合物的制备&#xff0c;来看&#xff01; RGD肽修饰聚谷氨酸-顺铂复合物制备&#xff1a; 以改性聚谷氨酸侧链羧基与顺铂稳定配位,再与RGD肽进行化学偶联,得到修饰后的药物复合物,对复合物的…

【Java基础】HashMap扩容 | CopyOnWriteArrayList 的底层原理 | 字节码 | Java 异常体系

1. HashMap的扩容机制 JDK 1.7 扩容是针对数组进行扩容&#xff0c;链表是不需要进行扩容的。扩容时先生成原来数组两倍大小的新数组&#xff0c;在把原来老数组上的链表上的元素转移过去。具体在转移链表中元素的步骤是&#xff1a;取每个元素的 key&#xff0c;基于新数组长…

Java反射学习笔记--使用示例

简介 反射是Java编程语言中的一个特性。它允许执行的Java程序 检查 或 操作 自身&#xff0c;并操作程序的内部属性。例如&#xff0c;Java类可以获取其所有成员的名称并显示它们。 反射的一个具体用途是在JavaBeans中&#xff0c;软件组件可以通过一个构建工具进行可视化操作…

specCPU 2006 备忘

前言 首先 specCPU是收费的,好像是800还是1000$&#xff0c;缴费了才有软件分发给你&#xff0c;但是个人或者国内某些项目测试都是百度或者找整机&#xff0c;CPU或者操作系统厂家给。 specCPU和其他性能测试工具类似&#xff0c;基本上都是在被测试机器现场编译测试程序&am…

C++11主要新增使用语法介绍

目录 1. C11简介 2. 统一的列表初始化 2.1 &#xff5b;&#xff5d;初始化 2.2 std::initializer_list 3. 声明 3.1 auto 3.2 decltype 3.3 nullptr 4. STL中一些变化 5. 右值引用和移动构造/赋值 5. 1 左值引用和右值引用 5.2 右值引用使用场景和意义 5.3 完美转发…

map底层实现原理

目录一、map数据结构二、bucket数据结构三、哈希冲突四、负载因子五、渐进式扩容1.扩容的前提条件2.增量扩容3.等量扩容六、查找过程七、插入过程八、Map的value赋值九、Map的遍历赋值一、map数据结构 Golang的map使用哈希表作为底层实现&#xff0c;一个哈希表里可以有多个哈…

2022-11-20 C++并发编程( 四十四 ) -- 通讯顺序进程 CSP 范型

C并发编程 -- 四十四 前言一、通讯顺序进程 CSP 范型1. 细节分解1. lambda 封装类成员函数和 std::function< > 函数封装器2. 模板和 dynamic_cast< >类型转换二、ATM 示例总结前言 并发编程除了常规的使用锁, 或无锁结构实现某些并发计算, 还有没有其它实现形式?…

controller-informer

推翻了自己的三次理论&#xff0c;最终确定informer流程。自己梳理&#xff0c;有错请提示&#xff0c;以便及时改正 一、流程图 图1为整体流程&#xff0c;图2位细节流程 二、主要组件 Reflector-负责与API-Server进行绑定Delta FIFO-增量先进先出队列Indexer-本地缓存Resour…