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

Flutter调用deleteProduct接口时抛出FormatException错误求助

解决Dart中json.decode抛出的FormatException问题

你的代码里有两个核心问题导致了这个异常:

  • URL拼接错误:直接拼接'http://127.0.0.1:8000/api/products'和productId会生成类似http://127.0.0.1:8000/api/products123的无效URL(假设productId为123)。后端收到错误请求后,返回的大概率不是合法JSON(可能是空响应、404错误页),这就导致json.decode解析时抛出FormatException。
  • 未校验响应状态:不管请求成功与否直接解码响应体,完全没考虑后端返回错误状态的情况。

修复后的代码

Future<Map<String, dynamic>> deleteProduct(String productId) async {
  // 用字符串插值拼接URL,自动处理斜杠问题
  String url = 'http://127.0.0.1:8000/api/products/$productId';
  var response = await http.delete(Uri.parse(url));

  // 先校验响应状态码,仅在成功时解码JSON
  if (response.statusCode == 200 || response.statusCode == 204) {
    // 204状态码通常表示无响应内容,需特殊处理
    return response.body.isEmpty ? {} : json.decode(response.body);
  } else {
    // 根据业务需求抛出错误或返回错误信息
    throw Exception('删除失败,状态码:${response.statusCode},响应内容:${response.body}');
  }
}

关键注意事项

  • 拼接URL优先用字符串插值或Uri构造方法,避免手动拼接出现斜杠缺失问题。
  • 必须先检查response.statusCode:DELETE请求成功可能返回200(带响应体)或204(无响应体),直接解码空字符串必然报错。
  • 调试时可以先打印response.body和response.statusCode,明确后端返回的内容,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:20:50