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

如何使用Axios实例以单个值作为请求体发送POST请求

解决Axios调用单个值作为请求体的POST API报400错误的问题

你的问题出在Axios对非对象类型请求体的默认处理逻辑上——直接传递数字itemId时,Axios无法正确生成后端可解析的请求格式,导致400 Bad Request。以下是几种可行的解决方式:

方式一:以纯文本格式传递数值

如果后端期望请求体是纯文本类型的数字,显式设置Content-Type为text/plain,并将数值转为字符串:

const loadMyItem = async (itemId) => {
    console.log("itemId:: ", itemId);
    setLoading(true);
    axiosInstance.post(
      URL_GetMyItem,
      itemId.toString(),
      {
        headers: {
          'Content-Type': 'text/plain'
        }
      }
    ).then((res) => {
      console.log("res", res);
      setMyItem(res?.result);
    }).catch((err) => {
      errorHandler(err);
    }).finally(() => {
      setLoading(false)
    })
  }

方式二:以JSON格式传递单个数值

如果后端接受JSON格式的单个值(而非键值对对象),手动将数值序列化为JSON字符串并指定Content-Type:

const loadMyItem = async (itemId) => {
    console.log("itemId:: ", itemId);
    setLoading(true);
    axiosInstance.post(
      URL_GetMyItem,
      JSON.stringify(itemId),
      {
        headers: {
          'Content-Type': 'application/json'
        }
      }
    ).then((res) => {
      console.log("res", res);
      setMyItem(res?.result);
    }).catch((err) => {
      errorHandler(err);
    }).finally(() => {
      setLoading(false)
    })
  }

方式三:通过transformRequest统一处理

如果需要多次调用这类接口,可以在axios实例中配置transformRequest,自动处理非对象请求体:

export const axiosInstance = axios.create({
  ...AXIOS_BASE_CONFIG,
  transformRequest: [(data, headers) => {
    // 如果请求体不是对象,直接转为字符串并设置对应请求头
    if (typeof data !== 'object') {
      headers['Content-Type'] = 'text/plain';
      return data.toString();
    }
    // 默认处理对象类型的请求体
    return JSON.stringify(data);
  }]
});

之后直接传递itemId即可,无需每次手动设置头信息。

原因说明

Axios默认会将对象类型的请求体序列化为JSON并设置Content-Type: application/json,但对于数字、字符串这类原始类型,它的默认处理逻辑可能不符合后端的解析要求,导致后端无法识别请求体内容,返回400错误。通过明确指定请求头和请求体格式,就能让后端正确解析你的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 14:37:24