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

React使用FormData上传文件时Java API无法识别RequestParams问题

React上传FormData到Java API时参数无法识别的问题解决

核心错误分析

  • 错误设置Content-Type头:手动指定multipart/form-data; boundary=XXX会导致后端解析失败,fetch发送FormData时会自动生成匹配的boundary并设置Content-Type,手动设置的固定值和实际boundary不匹配,后端无法正确解析表单字段。
  • 请求体传递错误:代码中if (data) myInit.body = data;的data变量未定义,实际应该使用创建好的formData对象,导致请求未携带任何表单数据,后端接收不到参数。
  • 多余响应头设置:Access-Control-Allow-Credentials和Access-Control-Allow-Origin是后端返回的响应头,前端请求时无需设置,属于无效操作。
  • 字符串语法错误:serverName定义末尾缺失闭合引号,会导致URL拼接出错。

修正后的React代码

let formData = new FormData();
formData.append("file", file);
formData.append("uploadId", uploadId);
formData.append("uploadTypeId", uploadTypeId);
formData.append("dateEntered", dateEntered);
formData.append("description", description);
formData.append("enteredBy", enteredBy);

let myHeaders = new Headers();
myHeaders.append("type", "formData");
// 补全缺失的引号
const serverName = "http://localhost:8080/MyApp/api/uploads/update/";

const jwt = sessionStorage.getItem("jwt");
let headerJwt = "Bearer " + jwt;
if (jwt != null) {
    myHeaders.append("Authorization", headerJwt);
}

let myInit = {
    method: "PUT",
    headers: myHeaders,
    // 直接传入formData作为请求体,无需手动序列化
    body: formData
};

let url = serverName + endpoint;
let returnFetch = fetch(url, myInit);

补充说明

FormData对象不需要手动序列化,fetch会自动处理它的编码和传输逻辑,直接作为请求体传入即可。Postman能正常工作是因为它自动正确配置了Content-Type和boundary,且正确传递了表单数据,而你的React代码存在上述关键错误导致请求无效。

内容的提问来源于stack exchange,提问作者Pat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:46:48