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字段上。
解决步骤
替换注解的导入包
把你ResponseObject里的@Json注解导入替换成Moshi的:import com.squareup.moshi.Json修正后的ResponseObject代码
data class ResponseObject( @Json(name = "notCamelcase") val notCamelCase: String, val param2: String, val param3: String )确认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
相关产品推荐
相关产品推荐

