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

使用OpenAPI Generator生成Flutter代码调用API时遇媒体类型错误

解决OpenAPI Generator生成Flutter代码调用接口时的媒体类型解析错误

问题背景

使用OpenAPI Generator基于YAML文件生成Flutter类后,调用AdminsApi的infoGet接口(GET请求,路径/info,基准地址https://localhost:8080/api)时,出现媒体类型解析错误:

Error on line 1, column 17: Invalid media type: expected no more input.
  ╷
1 │ application/json, application/json; charset=utf-8

原因分析

错误提示的媒体类型值是两个application/json相关类型用逗号拼接的结果,不符合HTTP媒体类型规范,导致解析失败。大概率是生成的代码中重复设置了Accept请求头,或是OpenAPI YAML文件中接口的produces字段重复定义了相同的媒体类型。

解决方案

方案1:修改生成的Dart代码

找到生成的AdminsApi.dart文件中infoGet方法的请求头配置部分,将重复的媒体类型值改为单一有效值:

  1. 定位到类似如下的代码段:
    final headerParams = <String, String>{};
    headerParams['Accept'] = "application/json, application/json; charset=utf-8";
    
  2. 将Accept头的值修改为单一的媒体类型,比如:
    headerParams['Accept'] = "application/json; charset=utf-8";
    
    或
    headerParams['Accept'] = "application/json";
    

方案2:修正OpenAPI YAML文件并重新生成代码

检查YAML文件中/info接口的produces字段,删除重复的媒体类型定义:

  1. 找到接口定义:
    paths:
      /info:
        get:
          produces:
            - application/json
            - application/json; charset=utf-8
          # 其他接口配置
    
  2. 删除其中一个重复项,保留单一有效值:
    produces:
      - application/json; charset=utf-8
    
  3. 重新使用OpenAPI Generator生成Flutter代码。

额外修正:异步调用处理

原测试代码中缺少await关键字,会导致打印Future实例而非接口返回的系统信息,需补充:

Future<void> _testCall() async {
    final api_instance = AdminsApi();
    try {
      final result = await api_instance.infoGet(); // 添加await
      print(result);
    } catch (e) {
      print('Exception when calling AdminsApi->infoGet: $e\n');
    }
  }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:25:12