使用Moshi转换Planetary类为JSON时提示找不到JsonAdapter类
解决Moshi找不到Planetary生成的JsonAdapter问题
出现Failed to find the generated JsonAdapter class for class Planetary错误的核心原因是Moshi未成功生成Planetary类对应的JsonAdapter实现,或项目配置缺失导致无法识别生成的代码。以下是具体解决步骤:
1. 补充Moshi Kotlin注解处理器依赖
@JsonClass(generateAdapter = true)需要借助注解处理器自动生成适配器代码,必须确保项目中添加对应依赖:
Groovy构建脚本(build.gradle)
// 顶部启用kapt插件 apply plugin: 'kotlin-kapt' dependencies { // Moshi核心库 implementation 'com.squareup.moshi:moshi:1.14.0' // Kotlin注解处理器,用于生成JsonAdapter kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.14.0' }
Kotlin DSL构建脚本(build.gradle.kts)
plugins { // 启用kapt插件 id("kotlin-kapt") } dependencies { implementation("com.squareup.moshi:moshi:1.14.0") kapt("com.squareup.moshi:moshi-kotlin-codegen:1.14.0") }
2. 清理并重新构建项目
注解处理器生成的代码可能存在缓存问题,执行以下操作强制重新生成适配器:
- 点击IDE菜单栏的
Build -> Clean Project - 再执行
Build -> Rebuild Project
3. 改用Kotlin反射适配器(替代注解生成方案)
如果不想依赖注解处理器生成代码,可改用Moshi的Kotlin反射适配器,无需@JsonClass注解:
第一步:添加反射适配器依赖
// Groovy implementation 'com.squareup.moshi:moshi-kotlin:1.14.0' // Kotlin DSL implementation("com.squareup.moshi:moshi-kotlin:1.14.0")
第二步:修改Moshi初始化代码
val moshi = Moshi.Builder() .add(DayAdapter()) .add(KotlinJsonAdapterFactory()) // 注册Kotlin反射适配器工厂 .build() val jsonAdapter = moshi.adapter(Planetary::class.java).lenient() val planetaryJson = jsonAdapter.toJson(planetary)
第三步:移除Planetary类的注解
删除Planetary类上的@JsonClass(generateAdapter = true)注解即可。
内容的提问来源于stack exchange,提问作者Karim Ata
相关产品推荐
相关产品推荐

