首页 > 解决方案 > Moshi 和 Retrofit2:应为 BEGIN_OBJECT 但为 STRING

问题描述

我在我的项目中面临这个问题。我从 api 调用收到如下响应:

{
    "aResponse": {
        "listOfSomething": [
             //here some data
        ]
    }
}

相关数据类是

data class ResponseClass(
    val aResponse : AResponse
) 

data class AResponse(
    val listOfSomething : List<String>
)

当“listOfSomething”为空时,我不会收到以下回复:

{
    "aResponse": {
        "listOfSomething": ""
    }
}

抛出(当然)异常

com.squareup.moshi.JsonDataException: Expected BEGIN_OBJECT but was STRING

我该如何解决?

标签: androidjsonkotlinretrofit2moshi

解决方案


您会收到此错误,因为当您获取数组的数据以及没有数据获取字符串时,这在改造中是错误的。

如果没有数据 insise listOfSomething 然后要求后端发送空数组而不是字符串。

{
    "aResponse": {
        "listOfSomething": []
    }
}

代替

{
    "aResponse": {
        "listOfSomething": ""
    }
}

推荐阅读