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()
}
}
我正在尝试编写合同来测试以下提供商端点
@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()
}
}