首页 > 解决方案 > 如何使用 Spring REST Docs 创建一个 curl 片段以使用双引号而不是单引号?

问题描述

Spring REST Docs 是创建最新 API 文档的一种非常好的方法。它还从您的测试代码生成代码片段,您可以将其插入到您的 API 文档中。当您的 API 用户阅读您的文档时,他们可以轻松地将片段复制并粘贴到他们的终端中并执行它。

目前,它使用字符串值周围的单引号生成片段:

$ curl 'https://some.url.com/teams' -i -X POST -H 'Content-Type: application/json' 
-H 'Accept: application/hal+json' -H 'Authorization: Bearer $TOKEN'
-d '{
  "description" : "Test Team"
}'

在上面生成的 curl 请求$TOKEN中将是一个环境变量,但由于单引号,变量替换不起作用。这就是为什么我想以某种方式配置 Spring REST Docs 以在标头值周围使用双引号。有人知道怎么做这个吗?

标签: springspring-dataspring-restdocs

解决方案


查看 spring rest docs 的源代码,包含标头变量的单引号是硬编码的CurlRequestSnippet,我看不到扩展/覆盖该行为的简单方法 - https://github.com/spring-projects/spring-restdocs /blob/master/spring-restdocs-core/src/main/java/org/springframework/restdocs/cli/CurlRequestSnippet.java#L148

但是您可以结束单引号,用双引号包裹 $TOKEN 变量,然后重新启动单引号,如:header("Authorization", "Bearer '\"$TOKEN\"'"))

具有变量替换的示例测试的更多上下文:

this.mockMvc.perform(get("/").header("Authorization", "Bearer '\"$TOKEN\"'"))
                    .andDo(print()).andExpect(status().isOk())
                .andExpect(content().string(containsString("Hello World")))
                .andDo(document("home"));

生成卷曲片段:

$ curl 'http://localhost:8080/' -i -X GET 
    -H 'Authorization: Bearer '"$TOKEN"''

不那么漂亮,但是当执行该片段时,bash 变量替换起作用。


推荐阅读