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

Moshi @Json注解在Fuel的moshiDeserializerOf中失效问题排查

Fuel + Moshi: @Json注解导致字段为null的问题排查与解决

嘿,这个问题我之前也碰到过!根本不是Fuel的moshiDeserializerOf失效,而是你用错了Moshi对应的注解包,导致字段映射完全没生效,所以notCamelCase一直是null。

问题根源:注解包不匹配

Moshi有自己专属的@Json注解,它的包路径是com.squareup.moshi.Json,而很多开发者会不小心导入Jackson的com.fasterxml.jackson.annotation.Json注解——Moshi根本不识别Jackson的注解,自然没法把JSON里的notCamelcase映射到你的notCamelCase字段上。

解决步骤

  1. 替换注解的导入包
    把你ResponseObject里的@Json注解导入替换成Moshi的:

    import com.squareup.moshi.Json
    
  2. 修正后的ResponseObject代码

    data class ResponseObject(
        @Json(name = "notCamelcase") val notCamelCase: String,
        val param2: String,
        val param3: String
    )
    
  3. 确认Moshi依赖正确引入
    如果你是用Gradle构建,确保你的依赖里包含Moshi的核心库(Fuel的moshi扩展会依赖它,但有时候可能需要显式声明):

    implementation 'com.squareup.moshi:moshi-kotlin:1.15.0' // 版本号可按需调整
    implementation 'com.github.kittinunf.fuel:fuel-moshi:2.3.1' // Fuel的Moshi扩展
    

额外排查点

  • 验证你的JSON响应体:确认返回的JSON里确实存在notCamelcase字段,并且有非null的值,避免是响应本身的问题。
  • 检查自定义Moshi实例(如果有的话):如果你手动创建了Moshi实例,确保没有开启strictMode()或者其他会阻止字段映射的配置,默认的Moshi实例是支持注解映射的。

完整的请求代码参考

import com.github.kittinunf.fuel.Fuel
import com.github.kittinunf.fuel.moshi.moshiDeserializerOf
import com.squareup.moshi.Json
import java.net.HttpURLConnection

data class ResponseObject(
    @Json(name = "notCamelcase") val notCamelCase: String,
    val param2: String,
    val param3: String
)

// 发起请求的代码
Fuel.get(someParam)
    .responseObject(moshiDeserializerOf(ResponseObject::class.java)) { _, response, result ->
        try {
            if (response.statusCode == HttpURLConnection.HTTP_OK) {
                val responseObject = result.component1()
                // 现在notCamelCase应该能正确获取到值了
            }
        } catch (e: Exception) {
            // 处理异常
        }
    }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:25:25