Spring boot Spring云契约和多部分/混合控制器方法

Spring boot Spring云契约和多部分/混合控制器方法,spring-boot,spring-cloud-contract,Spring Boot,Spring Cloud Contract,我正在努力为多部分/混合控制器方法创建契约,如下所示: @PostMapping("/posts") public Json createNew(@RequestPart MultipartFile header, @RequestPart MultipartFile photo, @RequestPart Json info) { // logic return new Json("ok"

我正在努力为多部分/混合控制器方法创建契约,如下所示:

@PostMapping("/posts")
public Json createNew(@RequestPart MultipartFile header,
                      @RequestPart MultipartFile photo,
                      @RequestPart Json info) {
     // logic
    return new Json("ok");
}
问题是,使用Groovy DSL,我无法(或没有找到一种方法)指定请求部分的内容类型。 如果没有它,自动生成的测试将如下所示:

// given:
MockMvcRequestSpecification request = given()
                .header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryBTX23kTw0Z5a5bsF")
                .multiPart("header", "filename1", "content1".getBytes())
                .multiPart("photo", "filename1", "content1".getBytes())
                .multiPart("info", "filename1", "{\r\n  \"status\" : \"new upload\"\r\n}".getBytes());
这将失败,因为如果没有指定内容类型,“info”部分将不会反序列化为Json对象

我在下面尝试了此代码,但无效:

request {
    method 'POST'
    url '/posts'
    multipart(
            [
                    ...
                    ...
                    info  : named(
                            name: value(consumer(regex(nonEmpty())), producer('filename1')),
                            content: value(consumer(regex(nonEmpty())), new ServerDslProperty(file("info.json"),
                                    headers {contentType(applicationJson())})))
            ]
    )

    headers {
        contentType('multipart/form-data; boundary=----WebKitFormBoundaryBTX23kTw0Z5a5bsF')
    }
}
所以,我的问题是:如何指定多部分请求的部分内容类型

编辑正如@Marcin所说,这是一个bug

关闭此问题后,问题得到了解决。只需使用最新的2.0.0版本(通过Finchley release train)。

看看,谢谢您的建议,@abdul,我知道如何为这种方法编写集成测试。我特别想问的是如何与sc-contract签订合同。我们可以将此转移到吗?我想知道你是否已经正确地重新设置了,如果是这样的话,那么很可能是一个错误bug@MarcinGrzejszczak,如果我手动更改自动生成的测试并添加mimetype说明符(如:
.multiPart(“info”,“filename1”,“status\”:“new upload\”\r\n}))“.getBytes(),“application/json”))-测试通过