Spring Boot 3.x 最简集成 Spring Doc-OpenApi

关注我,回复关键字“spring”免费领取Spring学习资料

在SpringBoot低版本时一般使用Swagger扫描接口生成Json格式的在线文档,然后通过swagger-ui将Json格式的文档以页面形式展示文档。可惜遗憾的是swagger更新到3.0.0版本(springfox)后不更新了。

SpringBoot3.x以后需要的JDK版本最低为Java17,而Java17的包名在之前的版本中从javax更改为jakarta,导致swagger在SpringBoot3.x版本中完全无法使用,而SpringDoc不同于swagger,在SpringBoot出了3版本以后很快就兼容升级了,换句话说SpringDoc是SpringBoot全系列都支持的。

欢迎关注公众号:SpringForAll社区(spring4all.com),专注分享关于Spring的一切!回复“加群”还可加入Spring技术交流群!

SpringDoc支持的内容

  • OpenAPI 3的标准实现

  • Spring-boot v3 (Java 17 & Jakarta EE 9)

  • JSR-303支持, 专门针对 @NotNull, @Min, @Max, and @Size.

  • Swagger-ui支持

  • OAuth2 认证流程

  • 本机镜像打包支持(GraalVM native images)

最简集成SpringDoc

文档地址:https://springdoc.org/#getting-started

  1. 创建SpringBoot项目

  2. 引入SpringDoc依赖

    

<!-- 适用于webmvc的SpringDoc依赖 -->

<dependency>

<groupId>org.springdoc</groupId>

<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>

<version>2.2.0</version>

</dependency>

该依赖包含swagger-ui和springdoc-openapi-starter-webmvc-api依赖,无需引入其它依赖即可生效。

  1. 创建一个测试接口,添加SpringDoc的注解以生成在线文档

    

package com.example.controller;


import io.swagger.v3.oas.annotations.Operation;

import io.swagger.v3.oas.annotations.Parameter;

import io.swagger.v3.oas.annotations.tags.Tag;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;


/**

* 示例接口

*

* @author vains

*/

@RestController

@RequestMapping("/example")

@Tag(name = "示例接口", description = "提供示例内容展示SpringDoc集成效果")

public class ExampleController {


@GetMapping("/test01")

@Operation(summary = "无参查询接口", description = "hello")

public String test01(){

return"Hello Spring doc";

}


@GetMapping("/test02")

@Parameter(name = "test02", description = "url参数")

@Operation(summary = "查询参数示例", description = "原样返回入参")

public String test02(String test02){

return test02;

}


@GetMapping("/test03/{test03}")

@Parameter(name = "test03", description = "url参数")

@Operation(summary = "url参数示例", description = "原样返回入参")

public String test03(@PathVariable String test03){

return test03;

}

}

  1. 启动项目后访问提供的接口地址

http://127.0.0.1:8080/swagger-ui/index.html

效果图如下

Springfox和SpringDoc注解对照表

官方文档:https://springdoc.org/index.html#migrating-from-springfox

Springfox SpringDoc 解释说明
@Api @Tag 描述接口信息
@ApiIgnore @Parameter(hidden = true)  @Operation(hidden = true)  @Hidden 隐藏字段
@ApiImplicitParam @Parameter 描述单个参数
@ApiImplicitParams @Parameters 描述多个参数
@ApiModel @Schema 描述数据模型
@ApiModelProperty(hidden = true) @Schema(accessMode = READ_ONLY) 描述属性,可隐藏
@ApiModelProperty @Schema 描述属性
@ApiOperation(value = "foo", notes = "bar") @Operation(summary = "foo", description = "bar") 描述接口操作,包括标题和注释
@ApiParam @Parameter 描述接口方法参数
@ApiResponse(code = 404, message = "foo") @ApiResponse(responseCode = "404", description = "foo") 描述接口响应信息,包括状态码和消息

作者:叹雪飞花
链接:https://juejin.cn/post/7302041173866119194

给大家推荐我们团队开发的Chrome插件:YouTube中文配音(https://www.youtube-dubbing.com/)。如果您跟我们一样,热爱看国外的视频学习前沿知识或者其他内容,该插件可以很好的帮助您讲外语视频一键转化为中文视频!



END



请停止使用 @Autowired 注入对象...
Tomcat 为什么要破坏 Java 双亲委派机制?
Linux难学?大神告诉你,Linux到底该怎么自学!
为什么阿里不推荐使用 keySet() 遍历HashMap?

高质量交流群,关注:SpringForAll,回复关键词:加群

相关推荐

  • Vite 5.0 正式发布,整了哪些活?
  • 请珍惜现在的工作机会
  • 被誉为 JavaScript 中 最难最常见 的手写题之一!!!
  • vue props的不规范使用破坏了props的单向数据流动
  • 15篇MyBatis-Plus系列集合篇「值得收藏学习」
  • 总结了十个Vue3超级实用但是很冷门的API
  • 11月24日,OC城市行·深圳站「操作系统与AI技术应用实践沙龙」邀你参与!
  • 99%的程序员容易忽视的“系统”健康问题
  • 纯CSS实现炫酷文本时钟
  • 和小伙伴们仔细梳理一下 Spring 国际化吧!从用法到源码!
  • 在农村,谁家孩子在华为、腾讯、阿里、字节上班,亲朋乡邻羡慕不已,年薪百万
  • 全新升级!Supabase 与 Next.js 14 的完美融合
  • 2024年不容错过的网站开发技术新趋势
  • 揭秘Java中的瑞士军刀——ArrayList源码解析
  • 轻量级文件快递柜,像拿快递一样取文件
  • 微软230页报告,像素级评估GPT-4前沿科研能力:潜力无限速速上车!
  • 起底OpenAI「国王」Ilya:师从Hinton,为了他,马斯克与谷歌创始人彻底决裂
  • OpenAI 505员工联名逼宫请奥特曼回归,Ilya痛悔赶走CEO!威胁董事会立即解散,否则集体跳槽微软
  • GPT-4V医学执照考试成绩超过大部分医学生,AI加入临床还有多远?
  • 脑科学如何启发AI,这场论坛带你全面探索「大脑网络与智能计算融合方式」