You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 19:22:26