如何在wiremock中编写响应作为带有列表的模板



我想在wiremock中使用模板响应,并将list设置为参数。如何做到这一点?

我在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": [
???
]
}

I

最简单的解决方案是使用Jackson2 Helper或任何其他可以序列化到json的Helper。

  1. 将Handlebars jackson2依赖项添加到您的项目中:
  • 梯度
testImplementation 'com.github.jknack:handlebars-jackson2:4.3.0'
  • Maven
<!-- 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>
  1. 使用wiremock实例注册处理程序:
WireMockServer wireMockServer = new WireMockServer(wireMockConfig().dynamicPort()
.extensions(new ResponseTemplateTransformer(false, "json", Jackson2Helper.INSTANCE)))

助手的名称将是json,这就是您从模板中引用它的方式。

  1. 在您的模板中使用它如下:
{
"place": "{{parameters.place}}",
"users": {{json parameters.users}}
}
  1. 输出为:
{
"place": "New York",
"users": [{"name":"John","age":24},{"name":"Merry","age":31}]
}

当然,您可以自定义Jackson2Helper,并使用自己的ObjectMapper实例创建自己的实例——如果您正在使用Spring并希望在任何地方使用相同的序列化选项,这将非常有用。

最新更新