【发布时间】:2019-08-17 01:03:45
【问题描述】:
我正在尝试使用 Wiremock 2.24.1 根据请求路径动态返回不同的主体文件,如果在本地找不到,我想调用外部资源(作为代理)。
我正在使用这个映射文件:
{
"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
我尝试了这个替代方案
- 我禁用了第一个映射(只是肯定的),wiremock 按预期作为代理工作。
- 我在代理映射文件上尝试了更广泛的 urlPattern ".*",但没有奏效,第一个映射仍然应答了呼叫。
- 我切换了优先级(1 到代理,10 到本地映射),但所有呼叫都由代理应答,包括“springfield”。
有没有办法在不编码的情况下解决这种情况?
【问题讨论】:
标签: java spring-boot proxy stub wiremock