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

Flutter中JSON字符串转对象请求API遇415错误的解决问询

解决API请求415错误的正确方式

问题根源

你的415错误核心原因有两个:

  1. 错误地将JSON数据放在URL的查询参数(?job=$job)中,而非POST请求的**请求体(Body)**里——API期望接收application/json格式的请求体,而非URL参数中的字符串。
  2. 原始JSON字符串带有外层引号,本质是"字符串包裹的JSON",直接传递会被识别为普通字符串,而非合法的JSON对象。

处理步骤

1. 正确解析带外层引号的JSON字符串

原始字符串是外层被双引号包裹的JSON结构,需要先将其转换为合法的JSON对象:

// 假设原始带外层引号的字符串为 jobStr
// 方式一:两次JSON解码
String innerJson = json.decode(jobStr);
Map<String, dynamic> jobData = json.decode(innerJson);

// 方式二:直接截取外层引号后解码
String innerJson = jobStr.substring(1, jobStr.length - 1);
Map<String, dynamic> jobData = json.decode(innerJson);

2. 修正请求代码

将处理后的JSON对象放入请求体,同时移除URL中的查询参数:

var responseModel = await apiWrapper.makeRequest(
      'Job/CreateNewJob', // 移除?job=$job参数
      Request.post,
      jobData, // 将JSON对象作为请求体传入
      isLoading ?? true,
      {
        'Content-Type': 'application/json',
        'Accept-Encoding': 'gzip, deflate, br',
        'Connection': 'keep-alive',
        'Authorization': 'Bearer $auth',
      },
    );

3. 额外注意事项

如果你的apiWrapper.makeRequest方法不会自动将对象序列化为JSON字符串,需要手动序列化后传入:

// 手动转为JSON字符串
String jobJson = json.encode(jobData);

var responseModel = await apiWrapper.makeRequest(
      'Job/CreateNewJob',
      Request.post,
      jobJson,
      isLoading ?? true,
      {
        'Content-Type': 'application/json',
        // 其他请求头保持不变
      },
    );

内容的提问来源于stack exchange,提问作者who-aditya-nawandar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:18:22