Wiremock 使用SpringCloudContract GroovyDSL,如何参数化响应以包含来自请求的值?

Wiremock 使用SpringCloudContract GroovyDSL,如何参数化响应以包含来自请求的值?,wiremock,spring-cloud-contract,Wiremock,Spring Cloud Contract,我正在使用SpringCloudContract为REST服务创建存根,以便使用REST客户端进行测试。我让存根运行程序在Spring Boot应用程序中工作,并且一切正常。我遇到的问题是,我希望在响应中看到请求的元素,以便更好地模拟REST服务的最终行为。例如,在本合同中,我希望请求中“代码”字段中传递的内容在响应中显示为反流: package contracts org.springframework.cloud.contract.spec.Contract.make { requ

我正在使用SpringCloudContract为REST服务创建存根,以便使用REST客户端进行测试。我让存根运行程序在Spring Boot应用程序中工作,并且一切正常。我遇到的问题是,我希望在响应中看到请求的元素,以便更好地模拟REST服务的最终行为。例如,在本合同中,我希望请求中“代码”字段中传递的内容在响应中显示为反流:

package contracts

org.springframework.cloud.contract.spec.Contract.make {
    request {
        method('POST')
        url $("/resource")
        body ([
                code : $(client(regex('[a-zA-Z0-9]{5,32}')))
        ])
    }

    response {
        status 200
        body([
                code: ???
        ])
    }
}
显然,输入“代码”可以是与正则表达式匹配的任何内容,因此实际值在运行时之前是未知的。我可以用什么代替“?”来返回请求中提交的代码吗?我尝试访问,例如:

request.body.serverValue['code']
但该值似乎是在编译时生成的,可能是为了在ContractVerifierTest.java中的生成测试源下自动生成测试


这能做到吗?这是对Spring Cloud Contract的适当使用吗?

目前,它不受支持。我们更倾向于采用合同更简单的方法。如果您在响应中需要来自请求的值,只需硬编码合同的请求和响应部分

但是,您可以提交一个问题,我们可以尝试在将来的版本中考虑一些问题

更新:


在1.1.0版本中,这已经成为可能。查看文档了解更多信息-

我们如何在DSL合同中传递请求参数,使用Spring Cloud contract for microservices architecture。您的意思是在响应中引用请求的一部分?如果是这个问题,那么在我指向文档的地方检查我的更新答案。我已经更新了答案,因为实际上从1.1.0开始你就可以这样做。哦,太棒了@MarcinGrzejszczak,谢谢你的更新!