Retrofit.responseBodyConverter не работает для преобразования errorBody () в пользовательский ResponseWrapper - PullRequest
0 голосов
/ 09 ноября 2018

Попытка преобразовать errorBody () ответа об ошибке модификации в ResponseWrapper следующим образом:

retrofit.responseBodyConverter<ResponseWrapper<R>>(Failure::class.java, arrayOf(object : Annotation {}))
                        .convert(response.errorBody())

ResponseWrapper выглядит следующим образом:

sealed class ResponseWrapper<R> {

data class Success<R>(val payload: R) : ResponseWrapper<R>()

data class Failure<R>(
        @field:Json(name = "code") val code: Int = INVALID_CODE,
        @field:Json(name = "status") val status: String = "",
        @field:Json(name = "exception") val exception: String = "",
        @field:Json(name = "message") val message: String = "",
        @field:Json(name = "fieldErrors") val fieldErrors: List<FieldError> = emptyList()
) : ResponseWrapper<R>()

class NotFound<R> : ResponseWrapper<R>()

class NoInternet<R> : ResponseWrapper<R>()

data class FieldError(
        @field:Json(name = "field") val field: String,
        @field:Json(name = "message") val message: String,
        @field:Json(name = "rejectValue") val rejectValue: String
) }

При этом с помощью Retrofit / Moshi создается следующее сообщение об ошибке:

java.lang.AbstractMethodError: abstract method "java.lang.Class java.lang.annotation.Annotation.annotationType()"
    at retrofit2.converter.moshi.MoshiConverterFactory.jsonAnnotations(MoshiConverterFactory.java:122)
    at retrofit2.converter.moshi.MoshiConverterFactory.responseBodyConverter(MoshiConverterFactory.java:91)
    at retrofit2.Retrofit.nextResponseBodyConverter(Retrofit.java:330)
    at retrofit2.Retrofit.responseBodyConverter(Retrofit.java:313)

Что я тут не так сделал?

...