修改API请求后出现NoSuchMethodError,重建.g文件无效,求解决方案
问题排查与解决
核心原因
报错NoSuchMethodError: Class 'String' has no instance method 'toJson'的直接诱因是API接口定义中uetr参数未明确声明类型,导致代码生成工具(如build_runner+retrofit)错误地对该参数执行序列化逻辑;或是调用接口时传入了非String类型的参数,框架试图对其调用toJson方法却失败。
修复步骤
补全参数类型声明
修改你的API服务代码,明确指定uetr的类型为String(如果是可选参数可声明为String?):@GET("/api/payments/income/{ref}/ultimate") Future<IncomePaymentActualDetailsResponse> getIncomePaymentActualDetails( @Path("ref") String ref, @Query("uetr") String uetr, // 明确标注参数类型 );检查调用传参
确认调用getIncomePaymentActualDetails方法时,传入的uetr参数是纯String类型,而非自定义对象或其他复杂类型。如果之前传的是模型实例,需提取其中对应的String字段传入。重新生成代码
执行完整的代码生成命令,确保覆盖旧的.g文件:flutter pub run build_runner build --delete-conflicting-outputs
额外排查点
- 若
uetr是可选参数,后端允许不传该字段,可将参数声明为@Query("uetr") String? uetr,避免传入null时的潜在问题。 - 确认
IncomePaymentActualDetailsResponse类已正确配置json_serializable注解并生成了对应的序列化代码(虽然当前报错不指向这里,但可排除后续潜在问题)。
内容的提问来源于stack exchange,提问作者Nikita Shadkov
相关产品推荐
相关产品推荐

