当前位置: 首页 > 知识库问答 >
问题:

将matchesJsonPath从Groovy注入Spring Cloud Contract

穆飞龙
2023-03-14
"$.['variants'][*][?(@.['name'] == 'product_0004' && @.['selected'] == true)]"

将出现在生成的json中,如下所示:

{
  "request" : {
    "bodyPatterns": [ {
      "matchesJsonPath": "$.['variants'][*][?(@.['name'] == 'product_0004' && @.['selected'] == true)]"
    } ]
  }
}

为了匹配,例如:

{ "variants": [
    { "name": "product_0003", "selected": false },
    { "name": "product_0004", "selected": true  },
    { "name": "product_0005", "selected": false } ]
}

和不匹配,例如:

{ "variants": [
    { "name": "product_0003", "selected": false },
    { "name": "product_0004", "selected": false },
    { "name": "product_0005", "selected": true  } ]
}

共有1个答案

慕迪
2023-03-14

在json路径上进行匹配有一些可能性,但您不一定要将它用于显式值的匹配,而是通过使用regex为使用者创建一个灵活的存根。但也有一些可能性。

因此,body部分是您的静态请求主体,具有硬编码的值,而bodyMatchers部分为您提供了使消费者端的存根匹配更加灵活的能力。

Contract.make {
  request {
    method 'POST'
    url '/some-url'
    body ([
      id: id
      items: [
         foo: foo
         bar: bar
      ],
      [
         foo: foo
         bar: foo
      ]
    ])
    bodyMatchers {
        jsonPath('$.id', byEquality())       //1
        jsonPath('$.items[*].foo', byRegex('(?:^|\\W)foo(?:$|\\W)'))    //2
        jsonPath('$.items[*].bar', byRegex(nonBlank()))     //3
      }
      headers {
          contentType(applicationJson())
      }
  }
  response {
    status 200
  }
}

我引用了一些行

2:我不确定当属性在列表中时,//1解决方案的工作效果如何,并且您希望存根能够灵活地使用所提供的项的数量。因此,我还包括了这个byRegex,它基本上意味着,对于列表中的任何项,属性foo必须具有确切的值“foo”。但是,我真的不知道你为什么要这么做。

3:这就是bodyMatchers其实最有用的地方。如果项目列表中的每个属性栏都是非空html" target="_blank">字符串,则该行表示:与此合同匹配。这允许您拥有一个具有灵活大小的列表/数组的动态存根。

为了使存根匹配,需要满足bodyMatchers中的所有条件。

 类似资料:
  • 问题内容: 我在Groovy中实现了Grails服务,我想在Web应用程序中将其注入Java类。我知道我可以通过applicationContext.getBean(“ exampleService”)获得Java中的bean,但是在编译时类型ExampleService是未知的。 我可以简单地导入服务吗?它似乎没有声明一个典型的包。 (我对Grails和Java Web还是很陌生,因此非常感谢能

  • 我创建了以下groovy脚本,以展示如何使用简单的注释将日志字段注入我们的类 当我运行groovy脚本时,我得到以下结果(在GROOVY CONSOLE上) 请告知我们如何将结果打印到WIN机器中的日志文件中,以及需要向groovy脚本中添加什么才能启用它? 例如: 日志文件 C: \程序文件\日志\我的。非常棒。日志 (应包含结果:)

  • 问题内容: 如何在Jenkinsfile中导入Groovy类?我尝试了几种方法,但没有一个奏效。 这是我要导入的类: 事态发展 这些是行不通的: Jenkinsfile-1 Jenkinsfile-2 Jenkinsfile-3 问题答案: 您可以通过load命令返回该类的新实例,并使用该对象调用“ doStuff” 因此,您可以在“ Thing.groovy”中找到它 您将在dsl脚本中包含以下

  • 在我的Jenkins构建中,我有一个Groovy脚本(因为我使用的是管道插件),在这个脚本中,我试图使用OkHttpClient进行API调用。 我从这里获得了以下葡萄代码: 为此,我得到: 知道有什么问题吗? 在Jenkins管道脚本中运行时,Grape不能检索包吗?

  • 我和EJB 3.1有冲突,我需要在战争中使用它。JAR和WAR都单独部署在同一个JBoss上(AS 7.1)。当我在战争中给一个CDI豆注射EJB时,我得到了这个错误: 从我目前的观点来看,@Inject没有看到EJB,但是如果我使用手动JNDI查找(来自WAR),我就可以获得这个bean的实例。可以使用@inject注释从另一个JAR注入EJB吗? WAR中的类(CDIBean),它从JAR中@

  • 问题内容: 是否可以将Spring bean注入RestEasy @Path类中?我设法通过Jersey并使用@InjectParam注释完成了此操作,但是由于某些其他原因,我需要切换到RestEasy,而且我似乎找不到解决方法(尝试了javax.inject.Inject,但没有)。 编辑 此解决方案有效:http : //www.mkyong.com/webservices/jax-rs/re