如何在 wiremock 中将响应写为带有列表的模板?
How to write response in wiremock as a template with list?
我想在 wiremock 中使用模板响应并将列表设置为参数。怎么做?
我在 Java 中设置了 wiremock:
wireMockServer.stubFor(get(urlPathEqualTo("/somePath"))
.withQueryParam("place.id", equalTo(buildingId))
.willReturn(aResponse()
.withHeader("Content-Type", "application/json")
.withBodyFile("wiremock/response-template.json") //how to set up this file
.withTransformerParameters(Map.of(
"place", "New York",
"users", List.of(new User("John", 24), new User("Merry", 31)) //list to insert
))
.withTransformers("response-template")));
如何编写文件:response-template.json 得到这样的结果:
{
"place": "New York",
"users": [
{
"name": "John",
"age": 24
},
{
"name": "Marry",
"age": 31
}
]
}
我知道它应该这样开始:
{
"place": "{{parameters.place}}",
"users": [
???
]
}
我
最简单的解决方案是使用 Jackson2 Helper 或任何其他可以序列化为 json 的助手。
- 将 Handlebars jackson2 依赖项添加到您的项目:
- Gradle
testImplementation 'com.github.jknack:handlebars-jackson2:4.3.0'
- 行家
<!-- https://mvnrepository.com/artifact/com.github.jknack/handlebars-jackson2 -->
<dependency>
<groupId>com.github.jknack</groupId>
<artifactId>handlebars-jackson2</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
- 使用您的 wiremock 实例注册处理程序:
WireMockServer wireMockServer = new WireMockServer(wireMockConfig().dynamicPort()
.extensions(new ResponseTemplateTransformer(false, "json", Jackson2Helper.INSTANCE)))
助手的名称将是 json
,这就是您在模板中引用它的方式。
- 在您的模板中使用它:
{
"place": "{{parameters.place}}",
"users": {{json parameters.users}}
}
- 输出为:
{
"place": "New York",
"users": [{"name":"John","age":24},{"name":"Merry","age":31}]
}
当然,您可以自定义 Jackson2Helper
并使用自己的 ObjectMapper
实例创建自己的实例 - 如果您使用 Spring
并希望在所有地方使用相同的序列化选项,这将非常有用。
我想在 wiremock 中使用模板响应并将列表设置为参数。怎么做?
我在 Java 中设置了 wiremock:
wireMockServer.stubFor(get(urlPathEqualTo("/somePath"))
.withQueryParam("place.id", equalTo(buildingId))
.willReturn(aResponse()
.withHeader("Content-Type", "application/json")
.withBodyFile("wiremock/response-template.json") //how to set up this file
.withTransformerParameters(Map.of(
"place", "New York",
"users", List.of(new User("John", 24), new User("Merry", 31)) //list to insert
))
.withTransformers("response-template")));
如何编写文件:response-template.json 得到这样的结果:
{
"place": "New York",
"users": [
{
"name": "John",
"age": 24
},
{
"name": "Marry",
"age": 31
}
]
}
我知道它应该这样开始:
{
"place": "{{parameters.place}}",
"users": [
???
]
}
我
最简单的解决方案是使用 Jackson2 Helper 或任何其他可以序列化为 json 的助手。
- 将 Handlebars jackson2 依赖项添加到您的项目:
- Gradle
testImplementation 'com.github.jknack:handlebars-jackson2:4.3.0'
- 行家
<!-- https://mvnrepository.com/artifact/com.github.jknack/handlebars-jackson2 -->
<dependency>
<groupId>com.github.jknack</groupId>
<artifactId>handlebars-jackson2</artifactId>
<version>4.3.0</version>
<scope>test</scope>
</dependency>
- 使用您的 wiremock 实例注册处理程序:
WireMockServer wireMockServer = new WireMockServer(wireMockConfig().dynamicPort()
.extensions(new ResponseTemplateTransformer(false, "json", Jackson2Helper.INSTANCE)))
助手的名称将是 json
,这就是您在模板中引用它的方式。
- 在您的模板中使用它:
{
"place": "{{parameters.place}}",
"users": {{json parameters.users}}
}
- 输出为:
{
"place": "New York",
"users": [{"name":"John","age":24},{"name":"Merry","age":31}]
}
当然,您可以自定义 Jackson2Helper
并使用自己的 ObjectMapper
实例创建自己的实例 - 如果您使用 Spring
并希望在所有地方使用相同的序列化选项,这将非常有用。