Я пытаюсь передать ресурс как @RequestPart моему контроллеру.
@RequestPart(name = "resource", required = false) Resource multipartFile,
Кажется, это хорошо работает в моих интеграционных тестах, где я передаю его в качестве ресурса:
ByteArrayResource resource = new ByteArrayResource(new byte[] {65, 66, 67});
MultipartBodyBuilder b = new MultipartBodyBuilder();
b.part("resource", resource, MediaType.APPLICATION_PDF);
return webClient.post().uri(getUri()
.contentType(MediaType.MULTIPART_FORM_DATA)
.syncBody(b.build())
.retrieve()
.bodyToMono(Long.class);
Однако в модульных тестах я всегда получаю resource = null. Я использую Mock MVC для этого:
MvcResult result = mvc.perform(
multipart(getUri())
.file("resource", new byte[] {65, 66, 67})
.content(new byte[] {65, 66, 67})
.accept(MediaType.MULTIPART_FORM_DATA)
.andExpect(status().isOk())
.andReturn();
С другой стороны, если я переключаюсь на использование MultipartFile в качестве типа параметра в моем контроллере:
@RequestPart(name = "resource", required = false) MultipartFile multipartFile
Это работает, если я передаю MockMultipartFile
в модульных тестах, но я не знаю, как пройти MultipartFile
в моих интеграционных тестах (и в другом сервисе, использующем мой API). Я попытался реализовать org.springframework.web.multipart.MultipartFile
, обернув свой ByteArrayResource
, но он не выглядит правильным (и не работает). Я потратил слишком много времени на это уже ... Любые рекомендации?
PS Я использую StandardServletMultipartResolver