springdoc-openapi-ui的使用教程

<dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1.6.14</version>
</dependency>

springdoc-openapi-ui 是一个用于生成 OpenAPI 文档的库,它与 Swagger 的关系如下:

区别

  1. OpenAPI 规范

    • springdoc-openapi 是基于 OpenAPI 3.0 规范的实现,而 Swagger 2.0 是较早的版本。OpenAPI 3.0 提供了更丰富的功能和更好的支持。
  2. 集成方式

    • springdoc-openapi 提供了更简单的集成方式,特别是在 Spring Boot 应用中。它可以自动扫描控制器和模型,并生成相应的 API 文档。
  3. 功能

    • springdoc-openapi 支持 OpenAPI 3.0 的所有特性,包括更复杂的请求和响应模型、参数、请求体等。

方法、VO 和请求对象的配置

使用springdoc-openapi-ui时,配置方法和VO与swagger2有所不同,它基于JavaDoc注解和特定的OpenAPI注解。下面是针对springdoc-openapi-ui的完整配置方案:

1. VO类配置

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;import java.math.BigDecimal;
import java.time.LocalDateTime;@Data
@Schema(description = "招标数据明细响应对象")
public class TenderDetailVO {@Schema(description = "主键ID", example = "1001")private Long id;@Schema(description = "招标编号", example = "ZB2023001")private String tenderNo;@Schema(description = "项目名称", example = "城市道路改造工程")private String projectName;@Schema(description = "招标单位", example = "市政建设有限公司")private String tenderUnit;@Schema(description = "招标方式", example = "公开招标")private String tenderMethod;@Schema(description = "招标金额(万元)", example = "500.80")private BigDecimal tenderAmount;@Schema(description = "发布时间")private LocalDateTime publishTime;@Schema(description = "截止时间")private LocalDateTime deadline;@Schema(description = "项目状态", example = "招标中")private String projectStatus;
}

2. 参数类(Param)配置

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;@Data
@Schema(description = "招标数据明细查询参数")
public class TenderDetailParam {@Schema(description = "招标编号", example = "ZB2023001")private String tenderNo;@Schema(description = "项目名称", example = "城市道路改造工程")private String projectName;@Schema(description = "招标单位", example = "市政建设有限公司")private String tenderUnit;@Schema(description = "页码", example = "1", required = true)private Integer pageNum;@Schema(description = "每页条数", example = "10", required = true)private Integer pageSize;
}

3. 分页响应类配置

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;import java.util.List;@Data
@Schema(description = "分页查询响应对象")
public class PageResultVO<T> {@Schema(description = "总记录数", example = "100")private long total;@Schema(description = "总页数", example = "10")private int pages;@Schema(description = "当前页码", example = "1")private int pageNum;@Schema(description = "每页条数", example = "10")private int pageSize;@Schema(description = "数据列表")private List<T> list;
}

4. 接口方法配置

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/tender")
@Tag(name = "招标数据管理", description = "招标数据相关接口")
public class TenderController {private final TenderService tenderService;// 构造函数注入服务public TenderController(TenderService tenderService) {this.tenderService = tenderService;}@Operation(summary = "查询宽表:获取招标数据明细",description = "根据条件查询招标数据明细,支持分页",responses = {@ApiResponse(responseCode = "200", description = "查询成功",content = @Content(schema = @Schema(implementation = PageResultVO.class))),@ApiResponse(responseCode = "400", description = "请求参数错误"),@ApiResponse(responseCode = "500", description = "服务器内部错误")})@PostMapping("/detail")public PageResultVO<TenderDetailVO> getTenderDetail(@Parameter(description = "查询参数", required = true)@RequestBody TenderDetailParam param) {// 调用服务层方法获取数据return tenderService.queryTenderDetail(param);}
}

关键配置说明:

  1. 核心注解变化

    • @Schema替代了swagger2的@ApiModelProperty
    • @Tag替代了@Api
    • @Operation替代了@ApiOperation
    • @Parameter替代了@ApiParam
    • @ApiResponse@Content组合替代了@ApiResponses
  2. VO配置要点

    • 使用@Schema注解描述类和字段信息
    • 通过example属性设置示例值
    • required属性标识是否为必填字段
  3. 接口方法配置

    • @Operation中可以直接定义响应信息
    • 通过@Content@Schema指定响应数据类型
    • @Parameter用于描述请求参数
  4. 分页处理

    • 保持分页响应对象的通用性
    • @ApiResponse中通过implementation指定具体的泛型实现

配置完成后,访问springdoc的默认地址http://localhost:8080/swagger-ui.html即可查看生成的API文档。这种配置方式更符合OpenAPI 3.0规范,并且能更好地与spring生态集成。

3. 请求对象配置

请求对象通常是用于接收客户端请求的对象。在上面的示例中,Item 类就是请求对象。您可以使用 @RequestBody 注解将请求体映射到该对象。

访问 API 文档

在启动应用程序后,您可以通过访问 http://localhost:8080/swagger-ui.html 来查看生成的 Swagger UI,您将看到所有配置的 API 及其文档。

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

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

相关文章

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-3,(运放/三极管)

目录 1、题目 2、解答 【硬件-笔试面试题】硬件/电子工程师&#xff0c;笔试面试题-3&#xff0c;&#xff08;运放/三极管&#xff09; 这是一道大疆的笔试题 1、题目 2、解答

SQL Server 数据类型的含义、特点及常见使用场景的详细说明

数值类型 bigint 含义:用于存储大范围的整数,是 8 字节(64 位)有符号整数类型。 范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 。 场景:适合存储像订单编号(可能很大)、系统中需要大范围计数的标识等,比如大型系统中大量数据的主键自增列(数据量极…

WPF的一些基础知识学习记录

路由事件 路由事件(Routed Event)是WPF事件系统的核心&#xff0c;它允许事件在元素树中传播&#xff0c;而不仅仅局限于引发事件的对象。包含以下三类&#xff1a;类型方向触发顺序典型用途示例事件​​直接事件(Direct Event)​​不路由只在源元素触发类似传统.NET事件MouseE…

【补题】Codeforces Round 1000 (Div. 2) C. Remove Exactly Two

题意&#xff1a;给一个树&#xff0c;可以从里面删去两个点&#xff0c;使连通块数量最大 思路&#xff1a;题解&#xff1a;CF2063C Remove Exactly Two - 洛谷专栏 这道题很容易想到&#xff0c;直接删去度最多的两个点就行了&#xff0c;但是这并不对&#xff0c;因为相邻…

基于php的校园招聘平台

学生&#xff1a;注册&#xff0c;登录&#xff0c;个人中心&#xff0c;学生应聘管理&#xff0c;面试邀请管理企业&#xff1a;登录&#xff0c;个人中心&#xff0c;招聘信息管理&#xff0c;学生应聘管理&#xff0c;面试邀请管理管理员&#xff1a;登录&#xff0c;个人中…

在 Ubuntu 22.04 上运行 cAdvisor 时遇到 mountpoint for cpu not found 错误

通常是由于 cgroup v2 导致的兼容性问题。Ubuntu 22.04 默认使用 cgroup v2&#xff0c;而旧版本的 cAdvisor 可能不完全支持它。以下是解决方案&#xff1a;方法 1&#xff1a;启用 cgroup v1&#xff08;推荐&#xff09;临时切换回 cgroup v1&#xff08;cAdvisor 兼容性更好…

如何让RAGFLow每次知识检索都是返回知识库中的所有文档?

在使用raglfow过程中,有时候输入的文本检索为空,要么就是只返回几条.如果想要看到所有知识库里文本返回,就得需要去到源码里修改这个参数minimum_should_match(路径:rag/utils/es_conn.py),将其设置为0%,即可返回所有文本!!

「iOS」——KVO

源码学习iOS底层学习&#xff1a;KVO 底层原理KVO注册 KVO 监听 实现 KVO 监听 移除 KVO 监听 处理变更通知 手动KVO(禁用KVO)关闭自动通知手动实现 setter 方法KVO 和线程如果 KVO 是多线程的**单线程的保证**如果没有 prior 选项**prior 选项的作用**KVO 实现原理派生类重写的…

Unreal5从入门到精通之使用 Python 编写虚幻编辑器脚本

文章目录 前言 如何运行Python 1.控制台 2.蓝图调用python python 入门 变量 数据类型 运算符 条件判断 循环 函数 模块引用 类型转换 类 类方法 继承 构造函数 unreal API 创建材质 创建材质实例 获取Content下选中资源 获取关卡中选中Actors 放置Cube 编辑器进度条 展示对话框…

Django3 - Web前端开发基础 HTML、CSS和JavaScript

网站开发可以分为前端开发和后端开发&#xff0c;前端开发是指网页设计&#xff0c;我们在浏览器看到网站的图片、文字、音乐视频等内容排版都是由前端开发人员实现的&#xff1b;后端开发是为前端开发提供实际的数据内容和业务逻辑&#xff0c;比如提供文字内容、图片和音乐视…

Nginx和Apache的区别

一。Nginx和Apache的优缺点和对比Nginx 优点Apache 优点性能与并发采用事件驱动模型&#xff0c;支持 10 万 高并发连接&#xff0c;资源&#xff08;CPU / 内存&#xff09;占用极低生态成熟&#xff0c;内置模块可直接处理动态内容&#xff0c;无需依赖第三方程序配置与部署…

前端实现可编辑脑图的方案

前端实现可编辑脑图的方案 实现可编辑脑图(Mind Map)在前端有多种方案&#xff0c;以下是一些主流的技术方案&#xff1a; 1. 基于现有开源库的方案 JavaScript 库 MindElixir: 轻量级开源脑图库&#xff0c;支持节点增删改、拖拽、导入导出等 GitHub: https://github.com/sssh…

7-大语言模型—指令理解:指令微调训练+模型微调

目录 1、指令微调的训练过程 2、指令微调数据 2.1、“指令输入” 2.2、“答案输出” 3、指令微调数据的构建方法 3.1、手动构建&#xff1a;纯人工 “出题 写答案” 3.1.1、构建流程 3.1.1.1、定义任务类型 3.1.1.2、设计指令模板 3.1.1.3、人工标注响应 3.1.2、工…

服务器版本信息泄露-iis返回包暴露服务器版本信息

漏洞信息描述&#xff1a;服务器版本信息泄露 测试过程&#xff1a;访问http://192.168.23.63&#xff0c;看返回包可以得知服务器版本信息 显示暴露返回server版本信息 修复建议&#xff1a;限制返回包带有服务器版本信息 如何隐藏IIS Web服务响应头中的IIS Server版本信息…

rust嵌入式开发零基础入门教程(二)

本教程的第二部分&#xff0c;我们将深入理解 Rust 语言的核心概念——所有权&#xff08;Ownership&#xff09;、借用&#xff08;Borrowing&#xff09;和生命周期&#xff08;Lifetimes&#xff09;。这些是 Rust 内存安全的基础&#xff0c;也是初学者理解 Rust 最关键的部…

【黑产大数据】2025年上半年互联网黑灰产趋势年度总结

2025年上半年&#xff0c;互联网黑灰产攻击持续演化&#xff0c;呈现出更隐蔽、更智能、更产业化的趋势。黑灰产从业人员数量继续增长&#xff0c;攻击资源、技术与作案场景全面升级。整体来看&#xff0c;2025年上半年黑灰产行业发生的几大事件&#xff0c;也时刻印证了黑灰产…

低代码/无代码平台如何重塑开发生态

低代码/无代码平台通过降低技术门槛、提升开发效率、推动业务和IT深度融合重塑开发生态。 具体而言&#xff0c;低代码/无代码平台极大降低了应用开发的技术门槛&#xff0c;使得非专业人员也能轻松构建业务应用。此外&#xff0c;它们通过可视化的开发模式&#xff0c;大幅提升…

ICA学习(2)

1.公式推导1.1两个问题ICA算法会带来2个不确定性&#xff1a;幅值不确定性和顺序不确定性。1.2 推导观测数据 x 是盲源 s 的线性混合&#xff1a;x As (1)此时&#xff0c;W矩阵是未知的&#xff0c;ICA算法的目的便是找到一个最优的矩阵W&#xff0c;实现对矩阵…

【愚公系列】《MIoT.VC》002-构建基本仿真工作站(布局一个基本工作站)

💎【行业认证权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域…

网络协议相关

OSI七层模型包含物理层、数据链路层、网络层、传输层、会话层、表示层和应用层;TCP/IP四层模型将其简化为网络接口层、网络层、传输层和应用层;映射关系:例如OSI的物理层和数据链路层对应TCP/IP的网络接口层&#xff0c;主要处理MAC地址寻址和物理介质传输。协议模型对比两者的…