我有一个get API调用。响应是这样的:
{
"id": "22222",
"resourceUri": "ssss",
"xxx": null,
"xxx": [],
"phone": "kkk",
"email": "jjjjjj",
}
在所有这些字段中,我只需要ID。所以,我创建了一个这样的类:
data class ApiResponse(
val id: String,
)
和API调用是这样的:
suspend fun apiCall(@Header("Authorization") authorization : String) :Response<ApiResponse>
它不起作用并抛出错误。我能做什么?
您提供的实现似乎没有什么问题。您的ApiResponse
类可以具有比响应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>
}
输出可以打印无误:
ID: 1 | Name: Smith | remark: null
因此,在上面的示例中,您可以看到返回的JSON包含age
,score
等属性,这些属性不包括在ApiResponse
中。因此,您可能必须检查导致错误的其他配置。
是的,你的API响应是正确的。您可以仅使用所需的数据创建响应。
data class ApiResponse(
val id: String,
)
你的错误可能是别的什么,请分享你的logcat错误,它可能被理解的错误