如何使用RestAssured发送多部分请求?

Łuk*_*ąży 5 java spring multipartform-data multipart rest-assured

我有@Controller这样的签名方法:

@PostMapping
@ResponseBody
public ResponseEntity<Result> uploadFileAndReturnJson(@RequestParam("file") MultipartFile file) {}
Run Code Online (Sandbox Code Playgroud)

我想构建多部分请求而无需物理创建任何文件.我尝试这样做:

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);
Run Code Online (Sandbox Code Playgroud)

不幸的是我收到了回复

所需的请求部分'文件'不存在

我试着看看RestAssured单元测试,看起来我正确地做到了.如果我尝试传递byte []或InputStream而不是String,则抛出异常:

无法使用不可重复的请求实体重试请求.

感谢帮助.

aba*_*hel 5

您的代码看起来不错,它应该与byte []一起使用。您可以MultiPartSpecBuilder(byte[] content)如下使用。

private MultiPartSpecification getMultiPart() {
         return new MultiPartSpecBuilder("Test-Content-In-File".getBytes()).
                fileName("book.txt").
                controlName("file").
                mimeType("text/plain").
                build();
   }
Run Code Online (Sandbox Code Playgroud)

关于byte []的错误的详细信息,请参见https://github.com/rest-assured/rest-assured/issues/507。根据此,您应该尝试使用如下抢占式基本身份验证。

.auth().preemptive.basic("admin", "admin")
Run Code Online (Sandbox Code Playgroud)