01_学习springdoc的基本使用

这篇具有很好参考价值的文章主要介绍了01_学习springdoc的基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 什么是 springdoc ?

  网上冲浪🏄🏻‍♂️时,无意间发现 java web 应用程序的在线接口文档,除了耳熟能详的 swagger 之外,还有个 springdoc。这也许就叫惊喜( ͡• ͜ʖ ͡• )

  还记得要使用 swagger2 的话,springboot 项目里面需要引入 springfox 的依赖。swagger2 遵循的是 OpenAPI 2 规范。现在已经有了 OpenAPI 3 规范,springdoc 便是 OpenAPI 3 和 springboot 的结合,是 springfox 的完美替代品。

  springdoc 的底层是 swagger3,前端页面看起来和 swagger2 的差不多,但无奈我是个喜新厌旧的人🙃,就是想学它~

2 springdoc 基本信息

  官网是 https://springdoc.org/ ,它不仅是官网,还是操作手册,里面说的很详细。

  需要注意的是,上面的官网是新版本 2.x 的,如果要看 1.x 版本的官网,则访问 https://springdoc.org/v1/

3 maven 依赖

3.1 version 1.7.0 及之前

  1.7.0 版本及之前的版本,支持 SpringBoot 2.x 和 Java 8,此时需要引入下面2个依赖:

<!-- springdoc 基础依赖,必须有它 -->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>1.6.14</version>
</dependency>
<!--
如果你的项目里面使用到了 spring security 的话,
需要加上springdoc 配合 spring security 的依赖
-->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-security</artifactId>
    <version>1.6.14</version>
</dependency>

  关于 springdoc 配合 spring security 的知识,目前的我对此一无所知🤣。后面再研究它吧,先把基础操作弄明白 已经搞定啦,详见文末链接。

  可以从 https://mvnrepository.com/ 里面查询到最新版,然后把 <version>1.6.14</version> 换成最新的。

3.2 新的 version 2.x 及之后

  目前(2023年10月)最新的版本 version 2.2.0,支持的是 SpringBoot 3.x 和 Java 17,此时只需需要引入一个依赖:

<!-- 2选1:使用 spring-boot-starter-web 的时候,只用下面的 webmvc-ui 的依赖 -->
<dependency>
   <groupId>org.springdoc</groupId>
   <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
   <version>2.2.0</version>
</dependency>

<!-- 2选1:使用 spring-boot-starter-webflux 的时候,则用下面的 webflux-ui 的依赖 -->
<dependency>
   <groupId>org.springdoc</groupId>
   <artifactId>springdoc-openapi-starter-webflux-ui</artifactId>
   <version>2.2.0</version>
</dependency>

  mvc 和 webflux 的依赖,2选1就可以。它们俩的版本号是一致的。新版本 2.x 的注解,和 1.x 的一样。

4 正文来袭

4.1 给 Controller 加注解

  主要就是下面 4 个注解:

  1. @Tag 用来设置 Controller 的名称和描述,类似于给 Postman 的 Collections 命名;
  2. @ApiResponses@ApiResponse 用来配置响应;
  3. @Operation 用来设置接口名称和描述;
  4. @Parameter 用来设置请求参数的描述、是否必填和示例。
@RestController
// 响应的 MediaType 都是 application/json
@RequestMapping(path = "/process-definition", produces = "application/json")
// Tag 注解, 给整个接口起了个名字 "流程定义", 描述是 "流程定义 API"
@Tag(name = "流程定义", description = "流程定义 API")
// ApiResponses 给每个接口提供一个默认的响应, 状态码是 200, 描述是 "接口请求成功"
@ApiResponses(@ApiResponse(responseCode = "200", description = "接口请求成功"))
public class ProcessDefinitionController {

    // Operation 注解设置了接口名称, 接口描述
    @Operation(summary = "上传 BPMN xml 字符串 并部署", description = "此接口处理的是 xml 字符串")
    @PostMapping("/upload-and-deploy/bpmn-xml-str")
    public JsonResult<?> uploadAndDeployBpmnXmlStr(@RequestBody BpmnXmlReq req) {
        return JsonResult.of(CommonCodeEnum.OK);
    }

    @Operation(summary = "查询单个 bpmn xml 数据")
    @GetMapping("/bpmn-xml")
    public JsonResult<BpmnXmlResp> findBpmnXml(
            // Parameter 注解设置了请求参数的描述, 是否必填 以及示例
            @Parameter(description = "流程部署ID", required = true, example = "1234") String deployId,
            @Parameter(description = "流程资源名称", required = true, example = "xxx.bpmn") String resourceName) {
        return JsonResult.of(CommonCodeEnum.OK, new BpmnXmlResp());
    }
}

  启动项目后,效果如下图:

springdoc,接口文档,学习,java,spring,springdoc,接口文档

图1 总览

springdoc,接口文档,学习,java,spring,springdoc,接口文档

图2 第一个接口

springdoc,接口文档,学习,java,spring,springdoc,接口文档

图3 第二个接口

4.2 给 Model 加注解

@Data
// Schema 注解设置这个类的描述
@Schema(description = "bpmn xml 请求参数")
public class BpmnXmlReq {
    // Schema 注解设置每个属性的描述和示例
    @Schema(description = "bpmn文件的内容, 字符串格式", example = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
    private String xml;
    @Schema(description = "流程部署名称", example = "请假流程")
    private String deployName;
}


@Schema(description = "json结构的响应")
public class JsonResult<T> {
    @Schema(description = "状态码", example = "200")
    private Integer code;
    @Schema(description = "状态码对应的信息", example = "请求成功")
    private String message;
    @Schema(description = "给前端返回的 json 格式的内容")
    private T content;
    // 省略部分内容
}

  效果如下图:

springdoc,接口文档,学习,java,spring,springdoc,接口文档
  点击 Example Value 后面的 Schema 可以看到如下图的内容:

springdoc,接口文档,学习,java,spring,springdoc,接口文档

  滑到页面的最下方,可以看到:

springdoc,接口文档,学习,java,spring,springdoc,接口文档

4.3 需要上传附件怎么办?

4.3.1 错误写法

  先看下错误写法😁:

@Operation(summary = "上传 BPMN 文件并部署", description = "此接口处理的是文件流")
@PostMapping(path = "/upload-and-deploy/bpmn-file")
public JsonResult<DeploymentResp> uploadAndDeployBpmnFile(
        @Parameter(description = "要上传的 BPMN 文件", required = true) MultipartFile file,
        @Parameter(description = "流程部署的名称", required = true) @RequestParam String deployName) {
    return processDefinitionService.uploadAndDeployBpmnFile(file, deployName);
}

  效果如下:

springdoc,接口文档,学习,java,spring,springdoc,接口文档
  这表明,springdoc 并不能根据接口的请求参数类型是 MultipartFile ,来自动识别出我们要的是上传附件。所以解决办法就是指明此接口需要媒体类型的是附件。

4.3.2 正确写法

  代码如下,我们指明此接口消费的是 multipart/form-data 这种媒体类型。

@Operation(summary = "上传 BPMN 文件并部署", description = "此接口处理的是文件流")
@PostMapping(path = "/upload-and-deploy/bpmn-file", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public JsonResult<DeploymentResp> uploadAndDeployBpmnFile(
        @Parameter(description = "要上传的 BPMN 文件", required = true) MultipartFile file,
        @Parameter(description = "流程部署的名称", required = true) @RequestParam String deployName) {
    return processDefinitionService.uploadAndDeployBpmnFile(file, deployName);
}

  效果如下:

springdoc,接口文档,学习,java,spring,springdoc,接口文档

4.4 如何给 API 排序? 如何给 HTTP 方法排序?

  😁这个也简单~ 参考官方文档 https://springdoc.org 的 5.2 swagger-ui properties 可知,有以下2个配置项可供我们给 API 和 HTTP 方法排序:

  • springdoc.swagger-ui.tagsSorter 给 API 排序, 如果其值为 alpha 就表示按字母顺序排序。默认情况下(也就是不配置此项),API 的顺序由 swagger 自己决定(也就是没什么顺序);
  • springdoc.swagger-ui.operationsSorter 给 HTTP 方法排序,其值为 alpha 同样表示按字母顺序排序,值为 method 表示根据 HTTP 请求的类型(顺序如下:DELETE > GET > POST > PUT)排序。默认情况下,Controller 代码里面,你写的是什么顺序,swagger 就给你展示什么顺序。

4.4.1 API 排序示例

  Java 的 Controller 代码如下:

@Tag(name = "01 登录", description = "登录相关API")
public class AuthController {}

@Tag(name = "05 历史", description = "历史 API")
public class HistoryController {}

@Tag(name = "02 流程定义", description = "流程定义 API")
public class ProcessDefinitionController {}

@Tag(name = "03 流程实例", description = "流程实例 API")
public class ProcessInstanceController {}

@Tag(name = "04 任务", description = "任务 API")
public class TaskController {}

  application.yml 部分内容如下:

springdoc:
  swagger-ui:
    # API 排序
    tags-sorter: alpha

  最终效果如下图所示:

springdoc,接口文档,学习,java,spring,springdoc,接口文档

4.4.2 HTTP 方法排序示例

  application.yml 部分内容如下:

springdoc:
  swagger-ui:
    # API 排序
    tags-sorter: alpha
    # HTTP 方法排序
    operations-sorter: method

  最终效果如下图所示:

springdoc,接口文档,学习,java,spring,springdoc,接口文档

5 大功告成

  springdoc 的基本使用,到这里就全部欧克了,so easy ~

  至于它和 spring security 的配合,后续再说~

6 传送门

  1. 功夫不负有心人,😁springdoc 和 SpringSecurity 的结合,我也研究好了,文档链接如下 《02_学习springdoc与SpringSecurity配合_使用访问令牌来认证》
  2. springdoc 与微服务的结合,文档链接如下 《03_学习springdoc与微服务结合_简述》
  3. springdoc 与 oauth2 结合,文档链接如下 《04_学习springdoc与oauth结合_简述》

  感谢阅读~文章来源地址https://www.toymoban.com/news/detail-782369.html

到了这里,关于01_学习springdoc的基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【SpringDoc】SpringBoot 3 swagger-ui.html 报404 SpringDoc 官方文档问题(可能)

    本文针对 SpringBoot 3.x 版本!! SpringDoc v2 官方文档:https://springdoc.org/v2/ 旧版本的 swagger 和 1.x 版本的SpringDoc 均不支持 SpringBoot 3,所以对于 SpringBoot3 如下的两种 Swagger 或 SpringDoc 依赖 均不可用 ,注意,是 不可用 无数的文章甚至 官方文档 都表示,swagger-ui 界面的网址是 htt

    2024年02月16日
    浏览(53)
  • IntelliJ IDEA 中使用Apifox IDEA 插件快速生成接口API (Java 开发告别写接口文档)

    Apifox IDEA 插件快速上手 | Apifox 帮助文档 特别注意: 1、idea版本必须大于2019.03才可以使用这个插件 2、修改设置不然分组校验必填项,apifox里面显示都是必填 添加图片注释,不超过 140 字(可选) Apifox IDEA 插件(Apifox Helper) 主要用于 IDEA 项目快速生成 API 文档,并同步到 A

    2024年03月24日
    浏览(66)
  • Python 爬虫的学习 day01 ,爬虫的基本知识, requests 和 charde模块, get函数的使用

    1.1什么是网络爬虫 网络爬虫,又称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。 1.2  网络爬虫的特点 网络爬虫是一个自动提取网页的程序,它为搜索引擎从万

    2024年02月15日
    浏览(45)
  • 【C++】String类基本接口介绍(多看英文文档)

    string目录 目录  如果你很赶时间,那么就直接看我本标题下的内容即可!! 一、STL简介 1.1什么是STL 1.2STL版本 1.3STL六大组件 1.4STL重要性 1.5如何学习STL 二、什么是string??(本质上是一个类) 三、string的类模板(什么?string居然利用了模板??) 三、string的三种构造(拷贝

    2024年02月07日
    浏览(41)
  • Spring Boot 整合 springdoc-openapi

    springdoc-openapi官网:springdoc.org springdoc-openapi Github仓库:springdoc / springdoc-openapi springdoc-openapi Maven仓库:Home » org.springdoc » springdoc-openapi-ui OpenApi是一个业界的 api 文档标准,一个规范。 好比java里面一个抽象的概念,即是一个抽象类,只是提供了一个api文档规范的抽象方法。

    2024年02月14日
    浏览(46)
  • TS学习01-基本数据类型

    布尔值 数字 字符串 数组 第一种: 在元素类型后面接上 [] 第二种 数组泛型-Array元素类型 元组 Tuple 表示一个已知元素数量和类型的数组· 当访问越界元素,会使用 联合类型 代替 枚举 enum 对 JavaScript 标准数据类型的一个补充。 默认从 0开始为元素编号;可以手动指定成员值

    2024年02月14日
    浏览(34)
  • java Spring Boot2.7写一个接口 提供图片预览 前端可以直接用接口地址当src为图片地址使用

    我们特别是在做小程序开发时 很多图片会比较大 而小程序本身就对自身大小要求非常高 所以 图片放在服务器上提供访问链接是一种非常好的选择 我想很多前端会误认为 直接将图片放在服务器上就可以了 但其实没那么简单 因为服务器其实也可以理解为一个电脑 你就想 你自

    2024年02月07日
    浏览(49)
  • Java技术-接口文档-Swagger2&Swagger3&接口文档UI整合

    目录 一、Swagger2完整用法 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 7.Swagger3页面效果 二、Swagger3完整用法 三、Swagger整合Knife4jUi 1.POM依赖 2.接口类 3.实现类 4.托管静态资源 5.接口文档配置 6.生产环境关闭接口文档 四、注释和参数讲解

    2024年02月16日
    浏览(49)
  • java中springcloud面试题01——基本概念

    什么是SpringCloud ? Spring Cloud是一套基于Spring Boot的微服务框架,它提供了各种工具和组件,用于帮助开发者快速构建和部署云原生应用程序。Spring Cloud采用了微服务架构的思想,将大型应用程序拆分成小而独立的服务,每个服务都可以独立开发、部署和扩展,以实现更高的灵活

    2024年01月23日
    浏览(41)
  • Spring Cloud Gateway集成SpringDoc,集中管理微服务API

    Spring Cloud微服务集成SpringDoc,在Spring Cloud Gateway中统一管理微服务的API,微服务上下线时自动刷新SwaggerUi中的group组。 框架 版本 Spring Boot 3.1.5 Spring Cloud 2022.0.4 Spring Cloud Alibaba 2022.0.0.0 Spring Doc 2.2.0 Nacos Server 2.2.3 公共模块里的配置是之前文章中提到的内容,加了一个webmvc和we

    2024年04月28日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包