【问题标题】:Unable to create @Body converter for class in Retrofit无法为 Retrofit 中的类创建 @Body 转换器
【发布时间】:2021-06-12 23:36:14
【问题描述】:

我有一个这样的改造实例

val moshi = Moshi.Builder()
        .add(SkipBadElementsListAdapter.Factory)
        .add(KotlinJsonAdapterFactory())
        .add(Date::class.java, MoshiDateAdapter())
        .build()

val okHttpClient = createHttpClientBuilder()
        .build()

return Retrofit.Builder()
        .client(okHttpClient)
        .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
        .addConverterFactory(MoshiConverterFactory.create(moshi))
        .baseUrl(Interactors.apiEndpoint)
        .build()
        .create(UserApiClient::class.java)

我正在发送此对象的列表

internal open class QuizAnswerDto(
        @Json(name = "questionOrder") val questionOrder: Int?,
        @Json(name = "questionKind") val type: String?,
        @Json(name = "questionId") val questionId: String?,
        @Json(name = "response") val response: Any?,
        @Json(name = "order") val answerOrder: Int?,
        @Json(name = "text") val answerText: String?,
        @Json(name = "responses") val answersMap: Map<Int, String>?){
    companion object {
        const val ANGRY_ID = 0
        const val UPSET_ID = 1
        const val NEUTRAL_ID = 2
        const val SATISFIED_ID = 3
        const val HAPPY_ID = 4
        const val UNKNOWN = -1

        const val LIKE_DISLIKE= "yes_no"
        const val SENTIMENT ="viewer_sentiment"
        const val SINGLE_ANSWER="multiple_choice"
        const val MULTIPLE_ANSWERS="select_all_that_apply"
        const val SHORT_ANSWER="short_answer"
    }
}

通过此 API 调用

@POST("campaigns/influencer/sponsorships/watchandrespond/{influencerSponsorshipId}/answers")

@JvmSuppressWildcards
fun submitAnswers(@Path("influencerSponsorshipId") influencerSponsorshipId: String,
                      @Body request: List<QuizAnswerDto>): Completable

当我这样做时,我得到了这个错误:

java.lang.IllegalArgumentException:无法创建@Body 转换器 对于 java.util.List (参数#2) 原因:java.lang.IllegalArgumentException: No JsonAdapter for E (with no annotations)

参数 #2 (questionKind) 始终是伴随对象中的 const 字符串之一,我不知道它在说什么“类型变量或通配符”。我做错了什么?

【问题讨论】:

标签: android retrofit retrofit2 moshi


【解决方案1】:

来自moshi documentation

val moshi = Moshi.Builder()
    .addLast(KotlinJsonAdapterFactory())
    .build()

KotlinJsonAdapterFactory 应该作为最后一个添加到构建器中。这可能会解决您的问题。

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 2019-07-25
    • 2021-11-22
    • 2016-06-23
    • 2016-03-22
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2017-01-12
    相关资源
    最近更新 更多