spring云合同dsl指定路径参数

spring cloud contract dsl specify path parameter

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

如何为这样的事情创建合同?

不,这是不可能的,因为 https://github.com/tomakehurst/wiremock/issues/383 . Theoretically you could create your own transformer + override the way stubs are generated in Spring Cloud Contract. That way the WireMock stubs would contain a reference to your new transformer (like presented in the WireMock docs - http://wiremock.org/docs/extending-wiremock/)。但这听起来像是为某事做了大量工作,但似乎并不是那么必要。为什么你需要这样做?在消费者方面,您想测试集成,对吗?因此,只需在合同中硬编码一些值而不是引用它们,然后检查您是否可以解析这些值。

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

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

可能自 Spring 云合同 1.2.0-RC1(在 this issue 中修复)。

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

参见docs