详解如何用spring Restdocs创建API文档

发布时间 - 2026-01-11 01:04:50    点击率:

这篇文章将带你了解如何用spring官方推荐的restdoc去生成api文档。本文创建一个简单的springboot工程,将http接口通过Api文档暴露出来。只需要通过 JUnit单元测试和Spring的MockMVC就可以生成文档。

准备工作

  1. 你需要15min
  2. Jdk 1.8
  3. maven 3.0+
  4. 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进行授权?(权限控制)  北京的网站制作公司有哪些,哪个视频网站最好?