okhttp3 moshi-JsonAdapter运行时问题



我正在尝试运行一个使用okhttp3进行Rest api调用的示例代码。

MoshiJsonConvertor.kt:

import com.squareup.moshi.JsonClass
import com.squareup.moshi.Moshi
import okhttp3.OkHttpClient
import okhttp3.Request
import java.io.IOException
class MoshiJsonConvertor {
private val client = OkHttpClient()
private val moshi = Moshi.Builder().build()
private val gistJsonAdapter = moshi.adapter(Gist::class.java)
fun run() {
val request = Request.Builder()
.url("https://api.github.com/gists/c2a7c39532239ff261be")
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) throw IOException("Unexpected code $response")
val gist = gistJsonAdapter.fromJson(response.body!!.source())
for ((key, value) in gist!!.files!!) {
println(key)
println(value.content)
}
}
}
@JsonClass(generateAdapter = true)
data class Gist(var files: Map<String, GistFile>?)
@JsonClass(generateAdapter = true)
data class GistFile(var content: String?)
}
fun main() {
MoshiJsonConvertor().run()
}

构建等级:

dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.squareup.moshi:moshi:1.9.1'
implementation 'com.squareup.moshi:moshi-kotlin-codegen:1.9.1'
}

当我运行代码时,我得到以下错误:

线程"main"java.lang.RuntimeException中的异常:找不到生成的JsonAdapter

class for class MoshiJsonConvertor$Gist
at com.squareup.moshi.internal.Util.generatedAdapter(Util.java:542)
at com.squareup.moshi.StandardJsonAdapters$1.create(StandardJsonAdapters.java:60)
at com.squareup.moshi.Moshi.adapter(Moshi.java:138)
at com.squareup.moshi.Moshi.adapter(Moshi.java:98)
at com.squareup.moshi.Moshi.adapter(Moshi.java:72)
at MoshiJsonConvertor.<init>(MoshiJsonConvertor.kt:10)
at MoshiJsonConvertorKt.main(MoshiJsonConvertor.kt:36)
at MoshiJsonConvertorKt.main(MoshiJsonConvertor.kt)
Caused by: java.lang.ClassNotFoundException: MoshiJsonConvertor_GistJsonAdapter
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:398)
at com.squareup.moshi.internal.Util.generatedAdapter(Util.java:516)
... 7 more

有人能告诉我我在这里缺了什么吗?

解决方案:

apply plugin: 'kotlin-kapt'
dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.squareup.moshi:moshi:1.9.1'
kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.9.1'
}

最新更新