我正在尝试使用Wiremock 2.24.1根据请求路径动态返回不同的body文件,如果在本地找不到,我想调用一个外部资源(作为代理)。
我正在使用此映射文件:
{
"priority": 1,
"request" : {
"urlPattern" : "/rest/v2/name/.*",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "rest_v2_name_{{request.requestLine.pathSegments.[3]}}_body.json",
"headers" : {
"Content-Type" : "application/json;charset=utf-8"
},
"transformers": ["response-template"]
}
}
而且我有一个名为rest_v2_name_springfield_body.json的文件,其中包含此内容
[
{
"name": "Springfield",
"now": "{{now}}",
"yesterday"; "{{now offset='-1 days' format='yyyy-MM-dd HH:mm:ssZ'}},
"tomorrow"; "{{now offset='1 days' format='yyyy-MM-dd HH:mm:ssZ'}}
}
]
当我调用curl http://localhost:8099/rest/v2/name/springfield时返回:
[
{
"name": "Springfield",
"now": "2019-08-17T00:23:12Z",
"yesterday"; "2019-08-15 21:23:12-0300,
"tomorrow"; "2019-08-17 21:23:12-0300
}
]
如果我使用其他路径值(例如http://localhost:8099/rest/v2/name/brasil进行调用),则希望通过此其他映射来处理:
{
"priority": 10,
"request" : {
"urlPattern" : "/rest/v2/name/.*",
"method" : "GET"
},
"response" : {
"proxyBaseUrl" : "http://restcountries.eu"
}
}
但是没有回答http://restcountries.eu/rest/v2/name/brasil的响应,而是收到此消息的本地HTTP 500错误(我相信这是从第一个匹配的映射中得出的:)
java.io.FileNotFoundException: ./__files/rest_v2_name_brasil_body.json
我尝试了这种替代方法
是否有一种无需编码即可解决此情况的方法?
不管代理on/off
,Wiremock将始终遵循优先级。
考虑到您具有相同的请求模式,
Case-I:当您具有
Proxy(brasil) at priority 1
和stub-mapping(spingfield) at priority 10
时:您将仅通过代理获得所有响应。没有其他类型的映射的故障转移检查。Case-I:当您具有
Proxy(brasil) at priority 10
和stub-mapping(spingfield) at priority 1
时:您将获得与您配置的存根映射相同的响应,因为每个请求都将满足springfield
规则。
为解决此问题,您需要在使用代理服务器时记录每个请求。
一旦停止记录,您可以根据需要检查映射并添加其他映射!