【问题标题】:How to match query parameter key and value in standalone wiremock?如何匹配独立wiremock中的查询参数键和值?
【发布时间】:2017-09-16 21:02:07
【问题描述】:

我想运行wiremock的独立jar文件,在用户点击特定url后发送一些json数据。

我创建了一个示例 json 文件并将其放在我的应用程序的映射目录中。

sample.json

{


 "request":
    {
      "url": "/data?date=date",
      "method": "GET",
      "queryParameters" : {
          "date" : {
            "matches" : "^\\d{4}-\\d{2}-\\d{2}$"
          }
      }
    },

  "response":
    {
      "status": 200,
      "headers":
        {
          "Content-Type" : "application/json"
        },
      "body": "[{\"a\":\"A\",\"b\":\"B\",\"c\":\"C\"},{\"a\":\"A\",\"b\":\"B\",\"c\":\"C\"}]"
    }
}

我想在浏览器中 ping 下面的 url,以便我可以在浏览器上获得 json 响应。

修改后的网址 -

192.168.0.5:8080/data?date=2017-02-02

我正在使用以下命令来运行我的应用程序 -

java -jar wiremock-standalone-2.6.0.jar

我想将查询参数日期值与请求的查询参数日期值匹配。

我无法在浏览器中看到 json 响应,因为它无法识别请求的 url。

我在编写映射 json 文件时缺少什么?

如何编写查询参数以便识别我的输入请求并在浏览器上提供 json 响应?

【问题讨论】:

    标签: json query-parameters wiremock


    【解决方案1】:

    问题在于您如何设置 URL 模式。您可以直接在 url 部分或在 queryParameters 块中指定查询参数,但不能同时指定两者。

    尝试: "urlPath": "/data"

    【讨论】:

      【解决方案2】:

      在我的情况下,我有一个常量字符串查询参数,我使用这种方法:

      @Rule
      public WireMockRule wireMockRule = new WireMockRule(8080);
      
      ...
      
      private void stubApiEndPoint() {
          stubFor(get(urlEqualTo("/api/users?id=123&name=Tom"))
              .willReturn(aResponse()
                  .withStatus(200)));
      }
      

      【讨论】:

        【解决方案3】:

        一种方法是使用正则表达式 mockMvc.perform(get(uri)).withQueryParam("query_param_name", matching("^(.*)wiremock([A-Za-z]+)$")).

        我们也可以将正则表达式用于查询参数名称,以便它可以模拟任何查询参数名称及其值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-08
          • 1970-01-01
          • 2021-02-22
          • 1970-01-01
          • 1970-01-01
          • 2021-12-25
          相关资源
          最近更新 更多