Spring Boot图片上传触发MediaTypeNotSupportedException问题求助
问题解决步骤
1. 修复表单编码类型
包含文件上传控件的表单必须指定enctype="multipart/form-data",否则浏览器会默认使用application/x-www-form-urlencoded提交请求,与Controller要求的multipart/form-data类型不匹配,直接触发HttpMediaTypeNotSupportedException。修改后的表单代码:
<form id="application" th:action="@{/admin/newapplication}" th:object="${application}" method="post" enctype="multipart/form-data"> <h1>Add Application</h1> <div class="input"> <input type="text" name="applicationName" placeholder="Application Name" required> <i class='bx bxs-user'></i> </div> <div class="input"> <input type="text" name="password" placeholder="Password to access application" required> <i class='bx bxs-lock-alt' ></i> </div> <input type="file" name="imageFile" accept="image/x-png,image/jpeg,image/jpg"/> <div class="input"> <select name="applicationType" id="Application Type"> <option value="admin">Navigation</option> <option value="user">Waste Management</option> <option value="user">Energy Consumption</option> </select> </div> <button type="submit" class="btn">Register Application</button> </form>
2. 匹配请求参数名称
Controller中@RequestParam(value = "file")的参数名是file,但表单文件输入框的name属性为imageFile,两者不匹配会导致无法获取文件,甚至参数绑定失败。修改Controller参数名并处理空指针风险:
@PostMapping(value = "/newapplication", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public String addApplication(@ModelAttribute Application application, @RequestParam(value = "imageFile",required = false) MultipartFile file) throws IOException { applicationRepository.save(application); // 增加非空判断,避免文件未上传时空指针异常 if (file != null && !file.isEmpty()) { fileService.uploadImage(file.getOriginalFilename(), file); } return "addApplication"; }
3. 额外优化建议
- 若要更精准地绑定表单数据到
Application实体,建议将表单输入框的name替换为th:field属性,比如th:field="*{applicationName}",减少参数名不一致的潜在问题。 - Spring Boot默认已自动配置
MultipartResolver,无需额外添加配置类,确保项目依赖中包含spring-boot-starter-web即可。
内容的提问来源于stack exchange,提问作者Syed
相关产品推荐
相关产品推荐

