温馨提示:本文翻译自stackoverflow.com,查看原文请点击:regex - Check for null values in request body using Wiremock
regex wiremock mocking httprequest stub

regex - 使用Wiremock检查请求正文中的空值

发布于 2020-04-05 20:34:22

我正在尝试设置一个Wiremock存根,如果JSON有效负载中的任何字段的值为空,则它将返回400错误。基本上是模拟错误请求。我一直在尝试使用匹配json键的任何小写字符串的正则表达式,但似乎不喜欢它。我在网上找不到我想要的任何示例,因此不确定是否有可能。

我的不良要求正文:

{
  "cat": null,
  "dog": {
    "id": 1344
},
  "horse": {
    "id": 1
},
  "fish": 1
}

我的存根:

wireMockServer.stubFor(post(urlEqualTo("/sample-api"))
            .withRequestBody(matchingJsonPath("$.^[a-z]*", equalTo(null)))
            .willReturn(aResponse()
                    .withStatus(400)
                    .withHeader("Content-Type", "application/json")))

在此示例中,我希望存根匹配“ cat”,因为它的值为null。事实并非如此。谁能告诉我我在做什么错?

查看更多

提问者
Aimee Jones
被浏览
15
A. Kootstra 2020-01-16 15:03

WireMock有关请求匹配文档中有关JSON路径匹配的部分源代码中,有对所用com.jayway.jsonpath.JsonPath的引用的build.gradle指的是2.4.0版本。Jayway JSON路径库的文档可以在其Github项目页面上找到这是一个很好的,但绝不是完美的在线评估在这里

WireMock文档仅以“ matchesJsonPath的形式显示对节点值的正则表达式的支持Jayway文档中有一个在线示例:$ .. book [?(@。author =〜/.*REES/i)]因此,唯一的方法是命名所有不允许的节点null

在下面的示例映射中,无论深度如何,所有提到的节点都将进行测试(请参阅@id)。如果所有提及的节点都不为空,则该映射将不会触发,但是某些未提及的节点为null。

{
  "request": {
    "urlPattern": "/sample-api",
    "method": "GET",
    "bodyPatterns" : [ {
      "matchesJsonPath" : "$..[?(@.cat == null || @.dog == null || @.horse == null || @.fish == null || @.id == null)]"
    } ] 
  },
  "response": {
    "status": "400",
    "headers": {
      "Content-Type": "application/json; charset=utf-8"
    },
    "jsonBody": {
      "message": "some sapi message"
    }
  }
}