spring - 如何使用 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 以在标头值周围使用双引号。有人知道怎么做这个吗?
解决方案
查看 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 变量替换起作用。
推荐阅读
- python - 使用 findall 时,TypeError:预期的字符串或类似字节的对象
- python-3.x - 使用cookies通过scrapy请求改变货币
- ssl - SSL 连接到 Redis Cloud 失败
- elasticsearch - ElasticSearch - 搜索包含单词分隔符和引号内的停用词未找到
- vmware-player - 解决 VMware 工具更新磁盘已满错误
- pandas - 如何根据某些规则拆分熊猫列,并对值求和
- javascript - 反应调度进入无限循环
- c# - 为什么行索引被调用两次?
- css - Angular Material - 显示/隐藏垫子抽屉的动画
- javascript - 哪个 Firebase javascript 包应该与 React Native 一起使用?常规的“Firebase Web SDK”还是“react-native-firebase”?