详解如何用spring Restdocs创建API文档
发布时间 - 2026-01-11 01:04:50 点击率:次这篇文章将带你了解如何用spring官方推荐的restdoc去生成api文档。本文创建一个简单的springboot工程,将http接口通过Api文档暴露出来。只需要通过 JUnit单元测试和Spring的MockMVC就可以生成文档。

准备工作
- 你需要15min
- Jdk 1.8
- maven 3.0+
- idea
创建工程
引入依赖,其pom文件:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.restdocs</groupId>
<artifactId>spring-restdocs-mockmvc</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
通过@SpringBootApplication,开启springboot
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
在springboot通常创建一个controller:
@RestController
public class HomeController {
@GetMapping("/")
public Map<String, Object> greeting() {
return Collections.singletonMap("message", "Hello World");
}
}
启动工程,访问localhost:8080,浏览器显示:
{“message”:”Hello World”}
证明接口已经写好了,但是如何通过restdoc生存api文档呢
Restdoc,通过单元测试生成api文档
restdocs是通过单元测试生存snippets文件,然后snippets根据插件生成htm文档的。
建一个单元测试类:
@RunWith(SpringRunner.class)
@WebMvcTest(HomeController.class)
@AutoConfigureRestDocs(outputDir = "target/snippets")
public class WebLayerTest {
@Autowired
private MockMvc mockMvc;
@Test
public void shouldReturnDefaultMessage() throws Exception {
this.mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk())
.andExpect(content().string(containsString("Hello World")))
.andDo(document("home"));
}
}
其中,@ AutoConfigureRestDocs注解开启了生成snippets文件,并指定了存放位置。
启动单元测试,测试通过,你会发现在target文件下生成了一个snippets文件夹,其目录结构如下:
└── target
└── snippets
└── home
└── httpie-request.adoc
└── curl-request.adoc
└── http-request.adoc
└── http-response.adoc
默认情况下,snippets是Asciidoctor格式的文件,包括request和reponse,另外其他两种httpie和curl两种流行的命令行的http请求模式。
到目前为止,只生成了Snippets文件,需要用Snippets文件生成文档。
怎么用Snippets
创建一个新文件src/main/asciidoc/index.adoc :
用 Spring REST Docs 构建文档
This is an example output for a service running at http://localhost:8080:
.request
include::{snippets}/home/http-request.adoc[]
.response
include::{snippets}/home/http-response.adoc[]
这个例子非常简单,通过单元测试和一些简单的配置就能够得到api文档了。
adoc的书写格式,参考:http://docs.spring.io/spring-restdocs/docs/current/reference/html5/,这里不多讲解。
需要使用asciidoctor-maven-plugin插件,在其pom文件加上:
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-docs</id>
<phase>prepare-package</phase>
<goals>
<goal>process-asciidoc</goal>
</goals>
<configuration>
<sourceDocumentName>index.adoc</sourceDocumentName>
<backend>html</backend>
<attributes>
<snippets>${project.build.directory}/snippets</snippets>
</attributes>
</configuration>
</execution>
</executions>
</plugin>
这时只需要通过mvnw package命令就可以生成文档了。
在/target/generated-docs下有个index.html,打开这个html,显示如下,界面还算简洁:
结语
通过单元测试,生存adoc文件,再用adoc文件生存html,只需要简单的几步就可以生成一个api文档的html文件,这个html文件你可以通网站发布出去。整个过程很简单,对代码无任何影响。
源码下载:https://github.com/forezp/SpringBootLearning
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring
# Restdocs创建API
# restdocs
# 文档
# 单元测试
# 只需要
# 创建一个
# 就可以
# 两种
# 成了
# 好了
# 有个
# 你可以
# 不多
# 很简单
# 还算
# 这篇文章
# 几步
# 再用
# 无任何
# 准备工作
# 带你
# 你会发现
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel如何实现用户密码重置功能?(完整流程代码)
高端建站三要素:定制模板、企业官网与响应式设计优化
如何在阿里云部署织梦网站?
Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】
如何在云主机上快速搭建多站点网站?
如何构建满足综合性能需求的优质建站方案?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
高端建站如何打造兼具美学与转化的品牌官网?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
浅谈Javascript中的Label语句
如何在阿里云ECS服务器部署织梦CMS网站?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
简单实现jsp分页
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
如何用wdcp快速搭建高效网站?
如何快速搭建支持数据库操作的智能建站平台?
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
如何在阿里云虚拟主机上快速搭建个人网站?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
jQuery 常见小例汇总
如何为不同团队 ID 动态生成多个独立按钮
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在云主机上快速搭建网站?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
Linux系统命令中screen命令详解
Python图片处理进阶教程_Pillow滤镜与图像增强
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
专业商城网站制作公司有哪些,pi商城官网是哪个?
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
制作旅游网站html,怎样注册旅游网站?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
如何彻底删除建站之星生成的Banner?
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
如何在七牛云存储上搭建网站并设置自定义域名?
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
Claude怎样写约束型提示词_Claude约束提示词写法【教程】
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
iOS验证手机号的正则表达式
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Python结构化数据采集_字段抽取解析【教程】
Laravel如何使用Gate和Policy进行授权?(权限控制)
北京的网站制作公司有哪些,哪个视频网站最好?

