gpt4 book ai didi

spring - Spring Boot 中不存在所需的请求部分 'file'

转载 作者:行者123 更新时间:2023-12-02 19:23:41 25 4
gpt4 key购买 nike

我检查了所有类似的帖子,但仍然找不到解决方案。

问题是测试类中所需的请求部分"file"不存在

我想上传一个文件并将其保存到数据库中。这是我的休息 Controller @RestController:

@PostMapping(value = "/upload")
public ResponseEntity<LogoDto> uploadLogo(@RequestParam("file") MultipartFile multipartFile) {
return ResponseEntity.ok(logoService.createLogo(multipartFile));
}

和我的测试类:

@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 的声明中,第一个参数应与 Controller @RequestParam 参数匹配。因此,就您而言,应该是:

MockMultipartFile file = new MockMultipartFile("file", "url", MediaType.APPLICATION_JSON_VALUE, image);

此外,我建议将您的 Controller 方法更新为以下方法:

@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public ResponseEntity<LogoDto> uploadLogo(@RequestPart("file") MultipartFile multipartFile) {
...
}

关于spring - Spring Boot 中不存在所需的请求部分 'file',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62683461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com