Spring Boot开发文件上传接口时GET请求报错:路径/file/upload/未找到
问题分析与解决方案
核心问题
- 类级请求方法限制冲突:你的
FileResource类上的@RequestMapping指定了method = GET,这会强制该类下所有接口仅接受GET请求。但上传接口用了@PostMapping("/upload"),这种情况下Spring不会注册这个POST接口——类的全局限制把请求方式锁死为GET,导致/file/upload路径不存在可处理GET请求的接口,所以发起GET请求时会提示路径未找到。 - 错误的请求方式:文件上传接口本身就该用POST(或PUT)请求,GET请求不支持携带文件参数,即便路径正确,用GET请求访问POST接口也会报错。
修复步骤
1. 移除类上的请求方法限制
修改类的@RequestMapping,去掉method = GET,让类下的接口可以自由定义请求方式:
@RestController @RequestMapping("/file") // 移除method=GET限制 public class FileResource { public static final String DIRECTORY = System.getProperty("user.home") + "/Downloads/"; @PostMapping("/upload") public ResponseEntity<List<String>> uploadFiles(@org.jetbrains.annotations.NotNull @RequestParam("files") List<MultipartFile> multipartFiles) throws IOException { List<String> filenames = new ArrayList<>(); for (MultipartFile file : multipartFiles) { String filename = StringUtils.cleanPath(Objects.requireNonNull(file.getOriginalFilename())); Path fileStorage = Paths.get(DIRECTORY, filename).toAbsolutePath().normalize(); Files.copy(file.getInputStream(), fileStorage, StandardCopyOption.REPLACE_EXISTING); filenames.add(filename); } return ResponseEntity.ok().body(filenames); } }
2. 修正参数名冲突
你方法里的参数名MultipartFile和类型重名了,改成小写的multipartFiles避免编译问题(上述代码已修正)。
3. 使用正确的请求方式
发起POST请求到/file/upload,并以multipart/form-data格式携带files参数(文件列表)。
额外提示
- 确保项目已引入
spring-boot-starter-web依赖,它包含处理文件上传所需的Multipart支持。 - 如果需要限制文件大小,可在
application.properties中配置:
spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB
内容的提问来源于stack exchange,提问作者Rami Taher Wahdan
相关产品推荐
相关产品推荐

