[英]How to ignore some fields in API response - Retrofit @GET
我有一個 get API 電話。 響應是這樣的:
{
"id": "22222",
"resourceUri": "ssss",
"xxx": null,
"xxx": [],
"phone": "kkk",
"email": "jjjjjj",
}
在所有這些字段中,我只需要 ID。 所以,我創建了一個 class 這樣的:
data class ApiResponse(
val id: String,
)
和 api 電話是這樣的:
suspend fun apiCall(@Header("Authorization") authorization : String) :Response<ApiResponse>
它不起作用並且會引發錯誤。 我能做什么?
您提供的實現似乎沒有任何問題。 您的ApiResponse
class 的屬性可能少於您的響應 JSON。
如果可能,請進一步提供您遇到的異常。
我在下面有一個小例子供您參考:
Main.kt
fun main(args: Array<String>) {
val retrofit = Retrofit.Builder().baseUrl("http://localhost")
.addConverterFactory(GsonConverterFactory.create())
.build()
val retromock = Retromock.Builder().retrofit(retrofit).build()
runBlocking {
val service = retromock.create(TestCall::class.java)
val response = service.apiCall()
println(response.body())
}
}
ApiResponse.kt
data class ApiResponse(
val id: String,
val name: String,
val remark: String,
) {
override fun toString(): String {
return "ID: $id | Name: $name | remark: $remark"
}
}
TestCall.kt
interface TestCall {
@Mock
@MockResponse(body = "{\"id\":\"1\", \"name\":\"Smith\", \"age\":30, \"score\":20, \"remark\":null}")
@GET("/")
suspend fun apiCall() : Response<ApiResponse>
}
並且 output 可以無誤地打印出來:
ID: 1 | Name: Smith | remark: null
因此在上面的示例中,您可以看到返回的 JSON 包含age
、 score
等屬性,這些屬性不包含在ApiResponse
中。 因此,您可能必須檢查導致錯誤的其他配置。
是的,您的 API 回復是正確的。 您可以僅使用所需數據創建響應。
data class ApiResponse(
val id: String,
)
您的錯誤可能是其他原因請分享您的 logcat 錯誤,它可能被理解為錯誤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.