Spring Boot中如何允许MultipartFile类型的上传文件参数为空?
解决方法
核心修改:调整@RequestParam注解配置
@RequestParam注解默认required = true,强制要求对应参数必须存在,你只需给file参数的注解添加required = false属性即可允许该参数为空:
@PostMapping("/contact") public ResultObj contactus( @RequestParam(value = "file", required = false) MultipartFile file, @RequestParam("topic") String topic, @RequestParam("name") String name, @RequestParam("phoneNumber") String phoneNumber, @RequestParam("question") String question ) { // 操作file前必须先做非空判断,避免空指针异常 if (file != null && !file.isEmpty()) { // 原有文件处理逻辑 } // 其他业务逻辑 }
兼容配置(若上述修改不生效可添加)
部分Spring Boot版本仍会触发校验报错,可在application配置文件中添加如下配置:
application.yml 版本
spring: servlet: multipart: resolve-lazily: true # 延迟解析上传请求,避免无文件时提前校验报错
application.properties 版本
spring.servlet.multipart.resolve-lazily=true
注意事项
- 无需在客户端传递0、null、空字符串这类无效值,直接不携带
file字段即可正常发起请求,之前的尝试无效是因为Spring会识别为已传递file字段但内容不符合MultipartFile类型要求 - 代码中所有对file对象的操作都要先做非空判断,避免触发空指针异常
内容的提问来源于stack exchange,提问作者Hikaru Shindo
相关产品推荐
相关产品推荐

