Spring 引导中不存在必需的请求部分 'file'
Required request part 'file' is not present in Spring Boot
我查了所有的模拟贴,还是没找到解决方法
问题是要求的请求部分 'file' 在测试 class 中不存在 。
我想上传一个文件并将其保存到数据库中。这是我的休息控制器 @RestController
:
@PostMapping(value = "/upload")
public ResponseEntity<LogoDto> uploadLogo(@RequestParam("file") MultipartFile multipartFile) {
return ResponseEntity.ok(logoService.createLogo(multipartFile));
}
和我的测试 class:
@Test
public void createLogo2() throws Exception {
String toJsonLogoDto = new Gson().toJson(logoDto);
MockMultipartFile file = new MockMultipartFile("path", "url", MediaType.APPLICATION_JSON_VALUE, image);
LogoDto response = LogoDataTest.validLogoDto();
Mockito.when(logoServiceMock.createLogo(Mockito.any(MultipartFile.class))).thenReturn(response);
mockMvc.perform(MockMvcRequestBuilders.multipart("/brand-icon/upload")
.file(file)
.content(MediaType.APPLICATION_JSON_VALUE)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.characterEncoding(CharEncoding.UTF_8))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk());
}
我的 application.yml
看起来像这样:
spring:
servlet:
multipart:
enabled: true
max-file-size: 2MB
max-request-size: 10MB
我尝试在我的@PostMapping 中添加消费;
尝试逐字设置每个 MediaTypes.. 仍然会出错。
非常感谢您的回答。
问题出在 MockMultipartFile
的声明中,第一个参数应与控制器 @RequestParam
参数匹配。所以,在你的情况下,应该是:
MockMultipartFile file = new MockMultipartFile("file", "url", MediaType.APPLICATION_JSON_VALUE, image);
此外,我建议将您的控制器方法更新为以下方法:
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<LogoDto> uploadLogo(@RequestPart("file") MultipartFile multipartFile) {
...
}
我查了所有的模拟贴,还是没找到解决方法
问题是要求的请求部分 'file' 在测试 class 中不存在 。
我想上传一个文件并将其保存到数据库中。这是我的休息控制器 @RestController
:
@PostMapping(value = "/upload")
public ResponseEntity<LogoDto> uploadLogo(@RequestParam("file") MultipartFile multipartFile) {
return ResponseEntity.ok(logoService.createLogo(multipartFile));
}
和我的测试 class:
@Test
public void createLogo2() throws Exception {
String toJsonLogoDto = new Gson().toJson(logoDto);
MockMultipartFile file = new MockMultipartFile("path", "url", MediaType.APPLICATION_JSON_VALUE, image);
LogoDto response = LogoDataTest.validLogoDto();
Mockito.when(logoServiceMock.createLogo(Mockito.any(MultipartFile.class))).thenReturn(response);
mockMvc.perform(MockMvcRequestBuilders.multipart("/brand-icon/upload")
.file(file)
.content(MediaType.APPLICATION_JSON_VALUE)
.contentType(MediaType.APPLICATION_JSON_VALUE)
.characterEncoding(CharEncoding.UTF_8))
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk());
}
我的 application.yml
看起来像这样:
spring:
servlet:
multipart:
enabled: true
max-file-size: 2MB
max-request-size: 10MB
我尝试在我的@PostMapping 中添加消费; 尝试逐字设置每个 MediaTypes.. 仍然会出错。
非常感谢您的回答。
问题出在 MockMultipartFile
的声明中,第一个参数应与控制器 @RequestParam
参数匹配。所以,在你的情况下,应该是:
MockMultipartFile file = new MockMultipartFile("file", "url", MediaType.APPLICATION_JSON_VALUE, image);
此外,我建议将您的控制器方法更新为以下方法:
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<LogoDto> uploadLogo(@RequestPart("file") MultipartFile multipartFile) {
...
}