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

Flutter调试遇FormatException错误,请求返回HTML而非JSON求助

解决Flutter中FormatException(返回HTML而非JSON)问题

你的错误核心是接口返回的是HTML内容而非预期的JSON,所以jsonDecode无法解析导致抛出异常。以下是具体解决步骤:

  • 第一步:打印返回内容,定位具体原因
    在调用jsonDecode之前,先把响应体完整打印出来,看这个HTML是错误页面、登录跳转页还是其他内容,快速定位问题根源:

    Future<AccademicCertModel> GetCert() async {
        SharedPreferences pref = await SharedPreferences.getInstance();
        var token = pref.getString('token');
    
        var headers = {'Authorization': 'Bearer $token'};
        var request = http.Request(
            'GET', Uri.parse('$baseUrl/api/user/training-certificates/get'));
    
        request.headers.addAll(headers);
    
        http.StreamedResponse response = await request.send();
        
        // 新增:打印响应体内容
        String responseBody = await response.stream.bytesToString();
        print('接口返回内容:$responseBody');
    
        if (response.statusCode == 200) {
          return AccademicCertModel.fromJson(jsonDecode(responseBody));
        } else {
          // 非200状态下禁止解析JSON,直接抛出错误
          throw Exception('请求失败,状态码:${response.statusCode},返回内容:$responseBody');
        }
      }
    
  • 第二步:修正错误的状态码处理逻辑
    你当前代码不管状态码是否为200,都强制解析JSON,这是错误的。非200状态(如401、404、500)下,服务器通常返回错误HTML页面,自然无法解析成JSON,必须分开处理。

  • 第三步:排查常见触发原因

    1. Token无效/过期:如果token为空、过期或格式错误,服务器可能返回登录跳转页面(HTML)。可以打印token确认值是否正确,或检查token的有效期。
    2. 接口URL错误:确认$baseUrl拼接后的完整URL是否正确,检查路径拼写、大小写、是否遗漏/多余斜杠。
    3. 请求头格式错误:确保Authorization头格式为Bearer 你的token,注意Bearer和token之间有一个空格,避免出现Bearer null(当token为空时)的无效格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:13:10