使用 Smart-doc 记录 Spring REST API

    如果您正在使用 Spring Boot 开发 RESTful API,您希望让其他开发人员尽可能容易地理解和使用您的 API。文档是必不可少的,因为它为将来的更新提供了参考,并帮助其他开发人员与您的 API 集成。很长一段时间以来,记录 REST API 的方法是使用 Swagger,这是一个开源软件框架,使开发人员能够设计、构建、记录和使用 RESTful Web 服务。2018 年,为了解决与 Swagger 等传统 API 文档工具相关的代码侵入性和依赖性问题,我们开发并将其开源给社区。smart-doc

在本文中,我们将探讨如何使用 Spring Boot REST API 生成文档。Smart-doc

什么是 Smart-doc?

    Smart-doc是 Java 项目的接口文档生成工具。它主要从 Java 源代码中分析和提取注释以生成 API 文档。Smart-doc 扫描代码中的标准 Java 注释,无需像 Swagger 中使用的注释那样进行专门的注释,从而保持代码的简单性和非侵入性。它支持多种格式的文档输出,包括 、 、 、 等。这种灵活性允许开发人员根据自己的需要选择适当的文档格式。此外,Smart-doc 可以扫描代码以生成 JMeter 性能测试脚本。MarkdownHTML5Postman CollectionOpenAPI 3.0

更多功能请参考官方文档。

使用 Smart-doc 记录 API 的步骤

第 1 步:Maven 项目

  • 使用最新版本的 Spring Boot 创建 Maven 项目

  • 将 Web 依赖项添加到项目

ea3ffc30fcde158e3559d3fe665bc132.png

第 2 步:将 Smart-doc 添加到项目中

  • 添加到项目的smart-doc-maven-pluginpom.xml

XML格式

<plugin><groupId>com.ly.smart-doc</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>[latest version]</version><configuration><configFile>./src/main/resources/smart-doc.json</configFile><projectName>${project.description}</projectName></configuration>
</plugin>
  • 在项目启动类所在的模块的 resources 目录中创建文件。smart-doc.json

JSON的

{"outPath": "/path/to/userdir"
}

步骤 3:创建 Rest 控制器

现在,让我们创建一个控制器类来处理 HTTP 请求并返回响应。

  • 创建一个控制器类,该类将作为 JSON 响应发送。

爪哇岛

public class User {/*** user id* */private long id;/*** first name*/private String firstName;/*** last name*/private String lastName;/*** email address*/private String email;public long getId() {return id;}public void setId(long id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}
}
  • 现在创建一个服务类

爪哇岛

@Repository
public class UserRepository {private static final Map<Long, User> users = new ConcurrentHashMap<>();static {User user = new User();user.setId(1);user.setEmail("123@gmail.com");user.setFirstName("Tom");user.setLastName("King");users.put(1L,user);}public Optional<User> findById(long id) {return Optional.ofNullable(users.get(id));}public void add(User book) {users.put(book.getId(), book);}public List<User> getUsers() {return users.values().stream().collect(Collectors.toList());}public boolean delete(User user) {return users.remove(user.getId(),user);}
}
  • 创建 RestController 类。

爪哇岛

/*** The type User controller.** @author yu 2020/12/27.*/
@RestController
@RequestMapping("/api/v1")
public class UserController {@Resourceprivate UserRepository userRepository;/*** Create user.** @param user the user* @return the user*/@PostMapping("/users")public ResponseResult<User> createUser(@Valid @RequestBody User user) {userRepository.add(user);return ResponseResult.ok(user);}/*** Get all users list.** @return the list*/@GetMapping("/users")public ResponseResult<List<User>> getAllUsers() {return ResponseResult.ok().setResultData(userRepository.getUsers());}/*** Gets users by id.** @param userId the user id|1* @return the users by id*/@GetMapping("/users/{id}")public ResponseResult<User> getUsersById(@PathVariable(value = "id") Long userId) {User user = userRepository.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User not found on :: " + userId));return ResponseResult.ok().setResultData(user);}/*** Update user response entity.** @param userId      the user id|1* @param userDetails the user details* @return the response entity*/@PutMapping("/users/{id}")public ResponseResult<User> updateUser(@PathVariable(value = "id") Long userId, @Valid @RequestBody User userDetails) {User user = userRepository.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User not found on :: " + userId));user.setEmail(userDetails.getEmail());user.setLastName(userDetails.getLastName());user.setFirstName(userDetails.getFirstName());userRepository.add(user);return ResponseResult.ok().setResultData(user);}/*** Delete user.** @param userId the user id|1* @return the map*/@DeleteMapping("/user/{id}")public ResponseResult<Boolean> deleteUser(@PathVariable(value = "id") Long userId) {User user = userRepository.findById(userId).orElseThrow(() -> new ResourceNotFoundException("User not found on :: " + userId));return ResponseResult.ok().setResultData(userRepository.delete(user));}
}

第 4 步:生成文档

您可以使用 Smart-doc 插件生成所需的文档,例如 、 等。IntelliJ IDEAOpenAPIMarkdown

f27f6551ff9c8726159bfdd0b3aaa3fe.png

当然,您也可以使用 Maven 命令生成:

mvn smart-doc:html
//  Generate document output to Markdown
mvn smart-doc:markdown
// Generate document output to Adoc
mvn smart-doc:adoc
// Generate Postman.
mvn smart-doc:postman
// Generate OpenAPI 3.0+
mvn smart-doc:openapi

第 4 步:导入到 Postman

这里我们用 生成一个 ,然后将其导入以查看效果。Smart-docPostman.jsonPostman

d31050590b2c39855e29e8557cbaead4.png

    由于 smart-doc 支持生成多种格式的文档,您可以选择生成然后使用或导入到一些专业的 API 文档系统中进行显示。OpenAPISwagger UI

结论

    从前面的例子可以看出,Smart-doc 通过扫描代码中的标准 Java 注释来生成文档,不需要像 Swagger 这样的专门注解,从而保持了代码的简单性和非侵入性,也不影响服务 Jar 包的大小。它支持多种格式的文档输出,包括、、、、等。这种灵活性允许开发人员根据自己的需要选择适当的文档格式进行输出。smart-doc 提供的 or 插件还方便用户将文档生成集成到 .MarkdownHTML5Postman CollectionOpenAPI 3.0MavenGradleDevops pipelines

    目前,Swagger 也有其优势,例如更强大的 UI 功能,以及对 Springboot Webflux 的更好支持。

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

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

相关文章

uni-app上传失败超出文件限制解决方法-分包处理-预加载

分包背景 当你的上传出现一下错误&#xff1a; Error: 系统错误&#xff0c;错误码&#xff1a;80051,source size 2089KB exceed max limit 2MB [20240703 10:53:06][wxbf93dfb6cb3eb8af] [1.06.2405010][win32-x64] 说明你主包太大需要处理了&#xff0c;一下两种方法可以…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

SpringCloudAlibaba基础四 微服务调用组件OpenFeign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 …

C语言中的文件操作

1. 为什么使⽤⽂件 如果没有文件&#xff0c;我们写的程序的数据是存储在电脑内存中的&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;要将数据进行持久化的保存&#xff0c;我们可以使用文件。 2. 什么是⽂件 磁盘&#xff08;硬盘&#…

springboot双学位招生管理系统-计算机毕业设计源码93054

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

golang写的自动更新器

文件自动更新器&#xff0c;这个很多端游和软件都有用到的。 golang的rpc通信&#xff0c;是非常好用的一个东西&#xff0c;可以跟调用本地函数一样&#xff0c;调用远程服务端的函数&#xff0c;直接从远程服务端上拉取数据下来&#xff0c;简单便捷。 唯一的遗憾就是&#x…

(九)绘制彩色三角形

前面的学习中并未涉及到颜色&#xff0c;现在打算写一个例子&#xff0c;在顶点着色器和片元着色器中加入颜色&#xff0c;绘制有颜色的三角形。 #include <glad/glad.h>//glad必须在glfw头文件之前包含 #include <GLFW/glfw3.h> #include <iostream>void …

【DataSophon】DataSophon1.2.1服务组件开启 kerberos

目录 一、DataSophon是什么 1.1 DataSophon概述 1.2 架构概览 1.3 设计思想 二、集成组件 三、环境准备 四、安装kerberos服务 4.1 Zookeeper 4.2 HDFS 4.3 HBase 4.4 YARN 4.5 hive 【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程-CSDN博客 【Da…

NAT地址转换实验,实验超简单

实验拓扑 实验目的 将内网区域&#xff08;灰色区域&#xff09;的地址转换为172.16.1.0 实验过程 配置静态NAT&#xff08;基于接口的静态NAT&#xff09; R1配置 <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sysname R1 [R1]un in en I…

从传统仓储到智能WMS:物流管理的变革

在现代经济中&#xff0c;物流管理是企业运营的关键组成部分。随着全球化和电子商务的迅猛发展&#xff0c;仓储管理的重要性愈发突出。传统的仓储管理方式已经无法满足高效、精确和快速响应的需求。为了应对这一挑战&#xff0c;智能仓储管理系统&#xff08;WMS, Warehouse M…

微软关闭中国所有线下店,并不影响全球第一

​关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 微软没有被时代淘汰&#xff0c;时代也没有告别微软!中国市场对微软可有可无&#xff0c;即便没有中国市场&#xff0c;微软市值也在全球前三&#xff0c;这是事实!a 5月中旬&#xff0c;微软azure解散中国分部…

Linux 搭建 Kafka 环境 - 详细教程

目录 一. Kafka介绍 1. 应用场景 2. 版本对比 二. Kafka安装 1. 前置环境 &#xff08;1&#xff09;安装JDK 2. 软件安装 &#xff08;3&#xff09;环境变量配置 &#xff08;3&#xff09;服务启动 三. Console测试 基础命令 &#xff08;1&#xff09;列出Kafk…

最近,被“AI”狠狠刷屏了......

最近&#xff0c;被“AI”狠狠刷屏了。 作为时下最热门的话题&#xff0c;AI画图、AI配音、AI写文案、AI做视频......AI在最近两年可谓是火遍全球。ChatGPT、Midjourney和SORA等技术不断涌现&#xff0c;不仅深刻改变着我们的生活方式&#xff0c;也推动了AI技术的飞速发展。 …

白杨SEO:打粉是啥?打粉引流怎么做?打粉引流犯法吗?小红书代发效果好吗?

文章大纲&#xff1a; 1、打粉是什么意思&#xff1f; 2、打粉有哪些方法&#xff1f; 3、打粉一般怎么变现&#xff1f; 4、打粉引流是违法犯罪吗&#xff1f; 5、小红书代发是啥&#xff1f; 6、小红书批量代发效果好吗&#xff1f; 打粉是什么意思&#xff1f; 打粉这…

【期末复习】数据库系统概论(附带考点汇总)

第1章.绪论 目录 第1章.绪论1.1. 数据库系统概述1.1.1.基本概念1.1.2.产生和发展 1.2.概念模型1.2.1.三种模型1.2.2.概念模型1.2.3.关系模型 1.3.数据库系统结构1.3.1三级模式结构1.3.2.两级映像与数据独立性 第2章.关系型数据库2.1.关系2.2.关系操作2.2.1.基本关系操作2.2.2.关…

计算机网络 | 期末复习

物理层&#xff1a; 奈氏准则&#xff1a;带宽&#xff08;w Hz&#xff09;&#xff0c;在不考虑噪音的情况下&#xff0c;最大速率&#xff08;2W&#xff09;码元/秒 信噪比S/N&#xff1a;以分贝&#xff08;dB&#xff09;为度量单位。信噪比&#xff08;dB&#xff09;…

docker安装nacos:v2.3.0

拉取镜像 sudo docker pull nacos/nacos-server:v2.3.0 查看镜像 sudo docker images 宿主机创建挂载文件 sudo mkdir -p /home/docker/nacos/logs sudo mkdir -p /home/docker/nacos/data sudo mkdir -p /home/docker/nacos/conf sudo touch /home/docker/nacos/conf/appli…

Xilinx FPGA:vivado实现乒乓缓存

一、项目要求 1、用两个伪双端口的RAM实现缓存 2、先写buffer1&#xff0c;再写buffer2 &#xff0c;在读buffer1的同时写buffer2&#xff0c;在读buffer2的同时写buffer1。 3、写端口50M时钟&#xff0c;写入16个8bit 的数据&#xff0c;读出时钟25M&#xff0c;读出8个16…

解决:使用MySQL Command Line Client时光标不显示

问题描述: 使用MySQL Command Line Client时&#xff0c;命令行输入字符光标不显示, 如下图: 解决办法: 1.按Shift键将输入法切换至中文,打出中文: 2.再按一次Shift键,光标就会显示:

uniapp/Android App上架三星市场需要下载所需要的SDK

只需添加以下一个权限在AndroidManifest.xml <uses-permission android:name"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY"/>uniapp开发的&#xff0c;需要在App权限配置中加入以上的额外权限&#xff1a;