Как отправить составной запрос с помощью RestAssured?

У меня есть @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);

К сожалению, получил ответ:

Требуемая часть запроса «файл» отсутствует

Я попытался просмотреть модульные тесты RestAssured, и, похоже, я делаю это правильно. Если я попытаюсь передать byte[] или InputStream вместо String, возникнет исключение:

Невозможно повторить запрос с неповторяемым объектом запроса.

Спасибо за помощь.


person Łukasz Chorąży    schedule 13.12.2016    source источник


Ответы (1)


Ваш код выглядит нормально и должен работать с byte[]. Вы можете использовать MultiPartSpecBuilder(byte[] content), как показано ниже.

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

Подробная информация об ошибке, которую вы получаете с помощью byte[], доступна по адресу https://github.com/rest-assured/rest-assured/issues/507. В соответствии с этим вы должны попробовать упреждающую базовую аутентификацию, как показано ниже.

.auth().preemptive.basic("admin", "admin")
person abaghel    schedule 14.12.2016