spring cloud contract dsl指定路径参数

时间:2017-05-10 13:02:02

标签: java spring dsl spring-cloud-contract

我正在尝试为GET请求创建合约,并且我想使用路径参数,该参数也可以在响应中重复使用。这是可能吗?我只能找到POST,查询参数和正文的示例。 因此,如果我想定义一个请求实体的合同,即/ books / 12345-6688,我想在响应中重用指定的ID。

如何为此类内容创建合约?

2 个答案:

答案 0 :(得分:4)

自Spring Cloud Contract 1.2.0-RC1 (在this issue中修复)以来可能。

response {
    status 200      
    body(
        path: fromRequest().path(),
        pathIndex: fromRequest().path(1)  // <-- here   
    )
}

请参阅docs

答案 1 :(得分:2)

由于https://github.com/tomakehurst/wiremock/issues/383,这是不可能的。从理论上讲,您可以创建自己的转换器+覆盖Spring Cloud Contract中生成存根的方式。这样,WireMock存根将包含对新变换器的引用(如WireMock文档中所示 - http://wiremock.org/docs/extending-wiremock/)。但这听起来似乎没有那么多必要的工作。为什么你需要像这样做?在消费者方面,你想测试集成,对吧?因此,只需对合同中的某些值进行硬编码,而不是引用它们,然后检查是否可以解析这些值。

更新: 如果您只需要参数化请求URL但不想在响应中引用它,则可以使用此处的正则表达式 - https://cloud.spring.io/spring-cloud-contract/single/spring-cloud-contract.html#_regular_expressions

UPDATE2: 就像@laffuste提到的那样,从RC1开始,你可以引用一个具体的路径元素