errorBody()预期为BEGIN_ARRAY

时间:2018-08-17 05:47:40

标签: android kotlin retrofit2 httpresponse

我正在尝试将errorBody转换为我的RegistrationResponse,但是它总是抛出Expected BEGIN_ARRAY but was BEGIN_OBJECT

RegistrationResponse

data class RegistrationResponse(
    val status: Boolean,
    val errors: List<RegistrationBody>
)

RegistrationBody

data class RegistrationBody(
    val lastname: String,
    val firstname: String,
    val middlename: String
)

我的转换器

if (it is HttpException) {
    if (it.code() == 400) {
        // Bad Request
        val errorConverter: Converter<ResponseBody, RegistrationResponse>? = retro?.responseBodyConverter(RegistrationResponse::class.java, arrayOfNulls<Annotation>(0))
        Log.i("TAG", "${errorConverter?.convert(it.response().errorBody())}")
    }
}

我的预期输出

{                       
    status: false,                  
    errors: {                   
        lastName: "The last name is required.",             
        firstName: "The first name is required.",               
        middleName: "The middle name is required.",             
    }                   
}

我错过了代码中的某些内容吗?

我也尝试

val errorConverter: Converter<ResponseBody, List<RegistrationResponse>>? = retro?.responseBodyConverter(RegistrationResponse::class.java, arrayOfNulls<Annotation>(0))

错误仍然是Expected BEGIN_ARRAY but was BEGIN_OBJECT

1 个答案:

答案 0 :(得分:3)

  

预期为BEGIN_ARRAY,但为BEGIN_OBJECT

RegistrationBody 对象,而不是 ARRAY

您应该使用

    data class RegistrationResponse(
    val status: Boolean,
    val errors: RegistrationBody
)