无法在改装中为类创建@Body转换器



我有一个类似的改造实例

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<com.weare8.android.data.quizz.QuizAnswerDto>(参数#2(引起原因:java.lang.IollegalArgumentException:没有用于E的JsonAdapter(没有注释(

参数#2(questionKind(总是伴随对象中的const字符串之一;类型变量或通配符";它在谈论。我做错了什么?

来自moshi文档

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

KotlinJsonAdapterFactory应作为最后一个添加到生成器中。这可能会解决你的问题。

最新更新