Spring 具有多个请求部分的云合同

Spring Cloud Contract with multiple requestparts

我正在尝试编写合同来测试以下提供商端点

@PostMapping(value = "/api/{id}/addFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
ResponseEntity<Void> addFiles(@PathVariable(value = "id") String id, @RequestPart("name") String name, @RequestPart("test") String test, @RequestPart("files") MultiPartFile[] files)

我正在努力编写一个适用于多个 RequestParts 的合同,例如这个。如果我将两个 String RequestParts 更改为 RequestParams,我可以通过以下约定让测试通过:

Contract.make {
  description "Add Files"
  request {
    urlPath("/api/idString/addFiles") {
      queryParameters {
        parameter 'name': value(consumer(regex(nonEmpty())), producer('name'))
        parameter 'test': value(consumer(regex(nonEmpty())), producer('test'))
      }
    }
    method POST()
    headers {
      contentType multipartFormData()
    }
    multipart(
      files: named(
        name: value(consumer(regex(nonEmpty())), producer('fileName')),
        content: value(consumer(regex(nonEmpty())), producer('fileContent'))
      )
    )
  }
  response {
    status ACCEPTED()
  }
}

但是有没有一种方法可以在将所有内容都保留为 RequestParts 的同时编写此合同?到目前为止,我尝试过的任何事情都无法奏效!

回答我自己的问题,因为我意识到我一直在犯的小错误。以下合同似乎有效,我曾尝试过类似的方法但没有在多部分中包含方括号:

Contract.make {
  description "Add Files"
  request {
    urlPath("/api/idString/addFiles")
    method POST()
    headers {
      contentType multipartFormData()
    }
    multipart([
      name: named(
        name: value(consumer(regex(nonEmpty())), producer('name')),
        content: value(consumer(regex(nonEmpty())), producer('name'))
      ),
      test: named(
        name: value(consumer(regex(nonEmpty())), producer('test')),
        content: value(consumer(regex(nonEmpty())), producer('testName'))
      ),
      files: named(
        name: value(consumer(regex(nonEmpty())), producer('fileName')),
        content: value(consumer(regex(nonEmpty())), producer('fileContent'))
      )
    ])
  }
  response {
    status ACCEPTED()
  }
}