org.springframework.web.multipart.MultipartFile 和 org.springframework.core.io.Resource 之间的转换
Conversion between org.springframework.web.multipart.MultipartFile and org.springframework.core.io.Resource
我正在尝试将资源作为 @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。我为此使用 MockMVC:
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
(以及在使用我的 [= 的其他服务中) 33=]).我尝试通过覆盖我的 ByteArrayResource
来实现 org.springframework.web.multipart.MultipartFile
,但它看起来不正确(并且不起作用)。我已经在这上面花了太多时间...有什么建议吗?
P.S。我使用 StandardServletMultipartResolver
我最终在控制器中使用了 @RequestPart(name = "resource") Part part
,它适用于
ByteArrayResource resource = new ByteArrayResource(new byte[] {1, 2, 3});
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);
和
Part part = new MockPart("resource", new byte[]{1,2,3})
MvcResult result = mvc.perform(multipart(getUri())
.part(part)
.andExpect(status().isOk())
.andReturn();
我正在尝试将资源作为 @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。我为此使用 MockMVC:
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
(以及在使用我的 [= 的其他服务中) 33=]).我尝试通过覆盖我的 ByteArrayResource
来实现 org.springframework.web.multipart.MultipartFile
,但它看起来不正确(并且不起作用)。我已经在这上面花了太多时间...有什么建议吗?
P.S。我使用 StandardServletMultipartResolver
我最终在控制器中使用了 @RequestPart(name = "resource") Part part
,它适用于
ByteArrayResource resource = new ByteArrayResource(new byte[] {1, 2, 3});
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);
和
Part part = new MockPart("resource", new byte[]{1,2,3})
MvcResult result = mvc.perform(multipart(getUri())
.part(part)
.andExpect(status().isOk())
.andReturn();