如何使用 Spring REST Docs 创建一个 curl 片段以使用双引号而不是单引号?

How to create a curl snippet with Spring REST Docs to use double quotes instead of single ones?

Spring REST Docs 是创建 up-to-date API 文档的一种非常好的方式。它还会根据您的测试代码生成代码片段,您可以将其插入到 API 文档中。当您 API 的用户阅读您的文档时,他们可以轻松地 copy-and-paste 将代码片段输入他们的终端并执行它。

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

$ 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 以在 header 的值周围使用双引号。 有人知道怎么做吗?

查看 spring rest 文档的源代码,包裹 header 变量的单引号在 CurlRequestSnippet 中进行了硬编码,我没有看到 [=25] 的简单方法=] 那种行为 - 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 变量替换有效。