带路径变量的服务端点导致404与云契约

时间:2017-09-21 00:03:43

标签: microservices rest-assured spring-cloud-contract groovydsl

我写了一份合同,插件自动生成测试。我在这些自动生成的测试中看到了一种非常奇怪的行为。

以下是我的服务终端:

@RequestMapping(value="/check/{id}" method= RequestMethod.GET, produces = Media.APPLICATION_JSON_VALUE)
public ResponseEntity<List<Application>> getApplications(
@PathVariable (value = "id") String id){

   return appService.findAll(id);
}

这是合同:

Contract.make {
    request {
        method GET()
        url '/check/1234567'
    }
    response {
        status 200
        body("""
            {
                .........
            }
            """)
        headers {
            contentType(applicationJson())
        }
    }
}

当我跑步&#34; mvn clean install&#34;测试是自动生成并运行的。这适用于上述合同和测试通过。

但是,如果我将路径中的数据更改为&#34; / check / 12345678&#34;它开始失败了。

我无法理解的是我的端点采用的是id路径变量,这是一种String类型。对于这种类型的路径,任何值都应该是好的。但是,以下路径有效:

    url '/check/1234567'
    url '/check/12'
    url '/check/12347'

以下没有工作:

    url '/check/12345678' //added just one more digit
    url '/check/aa4567'   //prepended characters 
    url '/check/123aa'    //appended characters

如果我可以获得有关此行为的解释或如何解决此问题,那就太棒了。实际上任何字符串都应该有效。例如"/check/234df-dfs-fs234fds-sdf-fssd3rr"

1 个答案:

答案 0 :(得分:0)

您可以尝试使用urlPattern而不是url,替换

url '/check/1234567'

代表

urlPattern '/check/[0-9]+'