springboot restdocs生成API文档

简介

restdocs通过手工编写文档模板,测试生成代码的形式来生成文档

依赖版本

  • springboot 2.1.9.RELEASE
  • spring-restdocs-mockmvc 2.0.4.RELEASE
  • spring-restdocs-asciidoctor 2.0.3.RELEASE(2.0.4下载不下来)

引入依赖

    <dependency> 
        <groupId>org.springframework.restdocs</groupId>
        <artifactId>spring-restdocs-mockmvc</artifactId>
        <version>2.0.3.RELEASE</version>
        <scope>test</scope>
    </dependency>
    
    <build>
        <plugins>
            <plugin> 
                <groupId>org.asciidoctor</groupId>
                <artifactId>asciidoctor-maven-plugin</artifactId>
                <version>1.5.3</version>
                <executions>
                    <execution>
                        <id>generate-docs</id>
                        <phase>prepare-package</phase> 
                        <goals>
                            <goal>process-asciidoc</goal>
                        </goals>
                        <configuration>
                            <backend>html</backend>
                            <doctype>book</doctype>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency> 
                        <groupId>org.springframework.restdocs</groupId>
                        <artifactId>spring-restdocs-asciidoctor</artifactId>
                        <version>2.0.3.RELEASE</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

构建测试环境

  • 示例使用maven构建项目,是使用junit进行测试,测试类上加上注解
    @SpringBootTest
    @RunWith(SpringRunner.class)
  • 添加依赖
       @Rule
       public JUnitRestDocumentation restDocumentation = new JUnitRestDocumentation();
    
    默认请下,代码片段会生成到target/generated-snippets目录下
  • 创建MockMvc
       @Autowired
       private WebApplicationContext applicationContext;
          
       @Before
       public void before(){
           this.mockMvc = MockMvcBuilders.webAppContextSetup(applicationContext)
                   .apply(springSecurity())
                   .apply(documentationConfiguration(this.restDocumentation)
                           .operationPreprocessors()
                           .withRequestDefaults(prettyPrint())
                           .withResponseDefaults(prettyPrint())
                           .and()
                           .uris()
                           .withScheme("http")
                           .withHost("localhost")
                           .withPort(8080).and()
                   ).build();
       }
    

构建测试代码

 @Test
 public void saveUser() throws Exception {
     User user = User.of()
             .setUserId(1l)
             .setUserName("tom")
             .setUserCaption("汤姆")
             .setAge(22)
             .setTelephone("15112311111")
             .setEmail("tom@123.com");
     this.mockMvc.perform(
             post("/user")
             .content(new ObjectMapper().writeValueAsString(user))
             .contentType(MediaType.APPLICATION_JSON_UTF8)
             .accept(MediaType.APPLICATION_JSON_UTF8)
     )
             .andDo(print())
             .andExpect(status().isOk())
             .andDo(document("saveUser"
             ));
 }

生成片段

在target/generated-snippets目录下可以看到 saveUser/xxx.adoc,其中adoc一共 有以下几个部分,针对不同类型请求与响应的片段

  • 代码片段包括以下几个部分
    /index/curl-request.adoc

    /index/http-request.adoc

    /index/http-response.adoc

    /index/httpie-request.adoc

    /index/request-body.adoc

    /index/response-body.adoc

构建*.adoc

  • 编写asciidoc文档模板:
    • 模板语法

      include::{snippets}/index/curl-request.adoc[]
      operation::xxxClassName/xxxmethodName[snippets='curl-request,request-fields,response-body,response-fields']
      
    • 模板示例

      == 用户管理
      
      === 接口说明
          系统用户的增删改查
      
      === 接口调用
      
      ==== 保存用户
      
      include::{snippets}/saveUser/curl-request.adoc[]
      
      include::{snippets}/saveUser/http-request.adoc[]
      
      include::{snippets}/saveUser/http-response.adoc[]
      
      include::{snippets}/saveUser/httpie-request.adoc[]
      

生成html文档

直接执行mvn package则可生成对应离线文档,文档位置 target/generated-docs

生成pdf文档

添加asciidoctorj-pdf依赖,网上下载的很多对中文支持都不好,同时asciidoctor-maven-plugin版本过高(1.5.8)会有问题,更换到1.5.5\
记得在插件中加上生成pdf的节点<execution>

参考

官网

源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值