Wiremock-第一次映射错误时重定向到代理

问题描述 投票:0回答:1

我正在尝试使用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

我尝试了这种替代方法

  • 我确实禁用了第一个映射(只是确定的,并且wiremock像预期的那样充当了代理。
  • 我在代理映射文件上尝试了更宽泛的urlPattern“。*”,但没有成功,首先映射仍然应答了呼叫。
  • 我将优先级(从1切换到代理,将10切换到本地映射),但是所有呼叫都由代理应答,包括“ springfield”。

是否有一种无需编码即可解决此情况的方法?

java spring-boot proxy stub wiremock
1个回答
0
投票

不管代理on/off,Wiremock将始终遵循优先级。

考虑到您具有相同的请求模式,

Case-I:当您具有Proxy(brasil) at priority 1stub-mapping(spingfield) at priority 10时:您将仅通过代理获得所有响应。没有其他类型的映射的故障转移检查。

Case-I:当您具有Proxy(brasil) at priority 10stub-mapping(spingfield) at priority 1时:您将获得与您配置的存根映射相同的响应,因为每个请求都将满足springfield规则。

为解决此问题,您需要在使用代理服务器时记录每个请求。

一旦停止记录,您可以根据需要检查映射并添加其他映射!

© www.soinside.com 2019 - 2024. All rights reserved.