从数据对象分析模型



我的API返回如下响应:

{
status: number,
message?: string,
data?: T,
}

因此,在改造服务中,我必须将所有返回值封装在这个响应类中:

data class Response<T>(val status: Int, val message: String?, val data: T?)
interface MyService {
@GET("user")
suspend fun getUser(id: String): Response<User>
}

现在的问题是:如何在不包装返回值的情况下使其返回类?

suspend fun getUser(id: String): User

在创建接口时,必须使多个函数返回多个返回对象。尝试制作一个通用响应接口,然后在代码中处理响应。让你的界面像这样:

@GET
suspend fun getUser(@Url endpoint: String,id: String): Call<ResponseBody>

然后在您的响应函数中使用它,如:

override fun onResponse(call : Call<ResponseBody>,response: Response<ResponseBody>) {
//Parse your object here
String responseBody = response.body().string();
JSONObject json = new JSONObject(responseBody);
val responseObject : User = Gson().fromJson(
json.optJSONObject("data")?.toString(),
User::class.java)
}

确保在你的应用程序gradle中实现Gson。

您可以使用Reform的CallAdapterCallAdapter.Factory调整返回类型。了解这一点应该可以帮助您在网上找到一些代码示例,这些示例可以适应您的特定用例。

最新更新