我的 @Controller
带有签名的方法:
@PostMapping
@ResponseBody
public ResponseEntity<Result> uploadFileAndReturnJson(@RequestParam("file") MultipartFile file) {}
我想构建多部分请求,而无需实际创建任何文件。我尝试这样做:
private MultiPartSpecification getMultiPart() {
return new MultiPartSpecBuilder("111,222")
.mimeType(MimeTypeUtils.MULTIPART_FORM_DATA.toString())
.controlName("file")
.fileName("file")
.build();
}
Response response = RestAssured.given(this.spec)
.auth().basic("admin", "admin")
.multiPart(getMultiPart())
.when().post(URL);
不幸的是我收到回复:
所需请求零件"文件"不存在
我尝试查看重新安排的单元测试,看来我正在正确地进行操作。如果我尝试通过字节[]或InputStream而不是字符串,则会抛出一个异常:
无法使用不可重复的请求实体重试请求。
感谢您的帮助。
您的代码看起来不错,并且应该与字节[]一起使用。您可以使用以下MultiPartSpecBuilder(byte[] content)
。
private MultiPartSpecification getMultiPart() {
return new MultiPartSpecBuilder("Test-Content-In-File".getBytes()).
fileName("book.txt").
controlName("file").
mimeType("text/plain").
build();
}
您与字节[]遇到的错误详细信息可在https://github.com/rest-assured/rest-assure/507上找到。据此,您应该尝试以下面的优先级基本验证。
.auth().preemptive.basic("admin", "admin")
try {
RestAssured.given()
.header(new Header("content-type", "multipart/form-data"))
.multiPart("file",new File( "./src/main/resources/test.txt"))
.formParam("description", "This is my doc")
.auth().preemptive().basic(loginModel.getUsername(), loginModel.getPassword())
.when()
.post(URL)
.then()
.assertThat()
.body(matchesJsonSchemaInClasspath("schemas/members/member-document.json"));
}
catch(Exception e) {
Assert.assertEquals(false, true);
logger.error(e.getMessage(), e);
}
我需要发送带有文件和JSON数据的多个请求,我像
一样解决它public static Response Post(JSONObject body, String URL, String file1, String file2) {
try {
return RestAssured.given().baseUri(URL).urlEncodingEnabled(false)
.accept("application/json, text/plain, */*")
.multiPart("data",body,"application/json")
.multiPart("file[0]", new File(file1),"multipart/form-data")
.multiPart("file[1]", new File(file2),"multipart/form-data")
.relaxedHTTPSValidation().when().post();
} catch (Exception e) {
System.out.println(e);
return null;
}
}