Wiremock:如何匹配不具有特定属性的JSON请求?

迪米特里·德·弗朗西斯

我正在尝试模拟在POST中接受JSON正文的API调用,它有两个可能的响应:

  1. 如果正文包含SearchCenter属性,请回答A
  2. 如果正文不包含SearchCenter,则回答B

Wiremock文档的“请求匹配”一章中,它仅显示如何正面匹配JSON,没有显示如何匹配缺少的属性。

样品要求SearchCenter

{
    "GeoCoordinatesResponseFormat": "DecimalDegree",
    "ProviderID": "bla bla",
    "SearchCenter": {
        "GeoCoordinates": {
            "DecimalDegree": {
                "Latitude": "{{search_lat}}",
                "Longitude": "{{search_lon}}"
            }
        },
        "Radius": {{search_radius}}
    }
}

不提供样品要求SearchCenter

{
    "GeoCoordinatesResponseFormat": "DecimalDegree",
    "ProviderID": "bla bla"
}
阿芙

编辑:我可能已经超越了自己-我认为有一个更简单的匹配解决方案。您可以对regex使用负匹配(负前瞻)我仍然认为我更喜欢优先级方法。

stubFor(any(urlPathEqualTo("/some-endpoint"))
    .withRequestBody(matchingJsonPath("$.?!SearchCenter"))
    .willReturn(ok("Body does not contain Search Center"));

stubFor(any(urlPathEqualTo("/some-endpoint"))
    .withRequestBody(matchingJsonPath("$.SearchCenter"))
    .willReturn(ok("Body does contain Search Center"));

有两种方法可以完成此操作。第一个将使用正则表达式匹配器/不匹配器。假设您正在使用存根...

stubFor(any(urlPathEqualTo("/some-endpoint"))
    .withRequestBody(notMatching("\"SearchCenter\": \{ .* \}"))
    .willReturn(ok("Body does not contain Search Center"));

stubFor(any(urlPathEqualTo("/some-endpoint"))
    .withRequestBody(matchingJsonPath("$.SearchCenter"))
    .willReturn(ok("Body does contain Search Center"));

这会在不匹配时进行正则表达式匹配,以检查该字段是否不存在,然后检查该字段确实存在的情况下的JSON路径匹配。(我没有测试实际的代码,因此正则表达式匹配/ JSON路径可能需要进行一些调整。)

但是,我认为更好的解决方案是让更具体的匹配返回一个响应,而不太具体的匹配返回另一个响应。我们可以通过优先事项实现这一目标。

stubFor(any(urlPathEqualTo("/some-endpoint"))
    .atPriority(1)
    .withRequestBody(matchingJsonPath("$.SearchCenter"))
    .willReturn(ok("Body does contain Search Center"));

stubFor(any(urlPathEqualTo("/some-endpoint"))
    .atPriority(2)
    .willReturn(ok("Body does not contain Search Center"));

可在此处找到有关优先级的信息优先级上的tl; dr强制WireMock先检查某些匹配项,然后再检查其他匹配项。在这种情况下,我们将检查请求正文是否包含所需的字段(“搜索中心”),如果包含,则返回匹配项。如果我们有其他具有相同优先级的存根(1),则在移至下一个优先级之前也会对它们进行检查。如果找不到我们要匹配的字段,我们将移至下一个优先级。由于优先级2的存根不需要与请求正文中的JSON路径匹配,因此我们将进行匹配。

我偏好优先于特定匹配两次的原因仅仅是因为我喜欢具有通用存根提供的“后备”行为,其中对“ / some-endpoint”的任何调用都将通过通用响应来实现。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何滤除具有特定属性的元素(或保留不具有该属性的元素)

来自分类Dev

如何从数组中删除所有不具有特定属性的对象?

来自分类Dev

如何选择不具有ID属性的元素?

来自分类Dev

如何遍历不具有id属性的对象列表

来自分类Dev

如何限制构造型不具有属性?

来自分类Dev

如何证明不具有特定值的行?

来自分类Dev

查找具有特定名称且不具有特定属性的在前同级

来自分类Dev

查找具有特定名称且不具有特定属性的在前同级

来自分类Dev

XSL计算父节点不具有具有特定属性的子节点

来自分类Dev

不具有[DataMember]属性与具有[IgnoreDataMember]属性

来自分类Dev

不具有[DataMember]属性与具有[IgnoreDataMember]属性

来自分类Dev

如何对不具有特定节的具有union语句的sql查询进行排序

来自分类Dev

Splunk:查找不具有记录为不同日志行的特定属性的事件

来自分类Dev

如何选择所有不具有align属性的p和其他样式选项

来自分类Dev

如何获取所有不具有给定属性的实体?

来自分类Dev

如何读取不具有LINES属性的xaml文本框的最后一行

来自分类Dev

如何设置不可见项而不具有不可见属性?

来自分类Dev

如何修复AttributeError:'tuple'对象不具有使用Tensorflow创建DqnAgent的'rank'属性?

来自分类Dev

如何修复AttributeError:'tuple'对象不具有使用Tensorflow创建DqnAgent的'rank'属性?

来自分类Dev

如何启用“标签”属性到通常不具有的文件类型?

来自分类Dev

JSF:PropertyNotFoundException类“不具有属性”

来自分类Dev

使用querySelector选择不具有值属性的输入

来自分类Dev

检查元素是否不具有jQuery属性

来自分类Dev

发布/订阅推送消息不具有messageId属性

来自分类Dev

使用XPath查找不具有ALT属性的图像

来自分类Dev

WPF组合框样式不具有绑定属性

来自分类Dev

如何使用Boto3列出不具有特定标签的快照

来自分类Dev

如何根据不具有特定值的关联进行查询?

来自分类Dev

具有@JsonIgnore的属性与不具有注释的属性之间有什么区别?

Related 相关文章

  1. 1

    如何滤除具有特定属性的元素(或保留不具有该属性的元素)

  2. 2

    如何从数组中删除所有不具有特定属性的对象?

  3. 3

    如何选择不具有ID属性的元素?

  4. 4

    如何遍历不具有id属性的对象列表

  5. 5

    如何限制构造型不具有属性?

  6. 6

    如何证明不具有特定值的行?

  7. 7

    查找具有特定名称且不具有特定属性的在前同级

  8. 8

    查找具有特定名称且不具有特定属性的在前同级

  9. 9

    XSL计算父节点不具有具有特定属性的子节点

  10. 10

    不具有[DataMember]属性与具有[IgnoreDataMember]属性

  11. 11

    不具有[DataMember]属性与具有[IgnoreDataMember]属性

  12. 12

    如何对不具有特定节的具有union语句的sql查询进行排序

  13. 13

    Splunk:查找不具有记录为不同日志行的特定属性的事件

  14. 14

    如何选择所有不具有align属性的p和其他样式选项

  15. 15

    如何获取所有不具有给定属性的实体?

  16. 16

    如何读取不具有LINES属性的xaml文本框的最后一行

  17. 17

    如何设置不可见项而不具有不可见属性?

  18. 18

    如何修复AttributeError:'tuple'对象不具有使用Tensorflow创建DqnAgent的'rank'属性?

  19. 19

    如何修复AttributeError:'tuple'对象不具有使用Tensorflow创建DqnAgent的'rank'属性?

  20. 20

    如何启用“标签”属性到通常不具有的文件类型?

  21. 21

    JSF:PropertyNotFoundException类“不具有属性”

  22. 22

    使用querySelector选择不具有值属性的输入

  23. 23

    检查元素是否不具有jQuery属性

  24. 24

    发布/订阅推送消息不具有messageId属性

  25. 25

    使用XPath查找不具有ALT属性的图像

  26. 26

    WPF组合框样式不具有绑定属性

  27. 27

    如何使用Boto3列出不具有特定标签的快照

  28. 28

    如何根据不具有特定值的关联进行查询?

  29. 29

    具有@JsonIgnore的属性与不具有注释的属性之间有什么区别?

热门标签

归档