簡體   English   中英

如何忽略 API 響應中的某些字段 - Retrofit @GET

[英]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 包含agescore等屬性,這些屬性不包含在ApiResponse中。 因此,您可能必須檢查導致錯誤的其他配置。

是的,您的 API 回復是正確的。 您可以僅使用所需數據創建響應。

data class ApiResponse(
    val id: String,
)

您的錯誤可能是其他原因請分享您的 logcat 錯誤,它可能被理解為錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM