我试图使用Wiremock Standalone服务器实现POST REST调用的模拟。我面临这样的挑战,假设帖子正文包含一个“名称”字段及其值,应该在该POST调用的响应中返回相同的值。我的json文件如下所示:
{
"priority": 1,
"request": {
"method": "POST",
"urlPath": "/primeSlots",
"bodyPatterns" : [ {
"matchesJsonPath" : "{ \"things\": [ { \"name\": \"794363\" }]
}"
} ]
},
"response": {
"status": 200,
"body": "{{$.things.name.value}}",
"transformers": ["response-template"]
}
}
所以,我需要获取值,即794363,但使用上述方法无法在post响应体中获取它。
我也试过了:
{
"request": {
"method": "POST",
"urlPath": "/transform",
"bodyPatterns": [
{
"matchesJsonPath" : "$.things[?(@.name =~ /[0-9]+/i)]"
}
]
},
"response": {
"status": 200,
"body": "{\"responseName\": \"
{{request.body.things.name.value}}\"}",
"headers": {
"Content-Type": "application/json"
},
"transformers": ["body-transformer"]
}
}
所以我的问题是,即使我使用的regEx与请求中的任何数字匹配,如何使用Wiremock独立的json文件在响应中返回相同的数字? 感谢。
答案 0 :(得分:2)
不幸的是,WireMock的响应模板变换器目前还没有将请求体分解为Map,这对于您尝试做的事情是必要的。请求正文只是一个字符串。
启用此功能的最简单方法可能是编写一个实现JSONPath的Handlebars助手或其他一些查询JSON文档的机制,然后在初始化WireMock时将其与模板转换器一起注册。
在某些时候,我会写一些把手助手来为XML和JSON做这种事情,但这不会有一段时间。
答案 1 :(得分:1)
今天我遇到了和你一样的情况,并找到了一个我想与你分享的解决方案:
ResponseDefinitionTransformer
Arrays.stream(StringHelpers.values()).forEach(helper -> this.handlebars.registerHelper(helper.name(), helper));
java -cp "-cp ".\lib\wiremock-standalone-2.5.1.jar;.\lib\customTransformer.jar" com.github.tomakehurst.wiremock.standalone.WireMockServerRunner --extensions "your.name.CustomTransformer"
(对于linux使用:
而不是;
作为类路径分隔符)如果您有多个变换器,只需在,
arg中使用--extensions
(逗号)作为分隔符定义所有变换器。