我无法解析改造后的 Json 数据,这是什么问题?
I cannot parse Json data from retrofit what's the problem?
这是我的代码
interface ApiService {
@POST("sms-otp/request")
suspend fun loginTest(@Body testRequest: TestRequest): Response<TestResponse>
}
data class TestResponse(
@SerializedName("otp")
@Expose
var otp : String? = null,
@Expose
@SerializedName("otpId")
var otpId: Int? = null
)
逻辑-
loginRepository.loginTest(testRequest.phoneNumber!!).let {
if (it.isSuccessful) {
_res.postValue(Resource.success(it.body()))
Log.d("_res", it.body().toString())
Log.d("_res" , _res.value.toString())
Log.d("_res", _res.value?.data.toString())
} else {
_res.postValue(Resource.error(it.errorBody().toString(), null))
}
}
这是我的日志,我认为响应代码是 201,也许成功但我的模型中没有数据...请帮助我
enter image description here
您正在从服务器收到响应,如 okhttp
日志记录所示。但是,改造无法映射它。因为您的响应有错误的 kotlin 数据 class。
{
"code": "0000",
"message": "ok",
"data": {
"otpId": 21,
"otp": "518793"
}
}
响应在 data
对象中有 otpData
,但您的 TestResponse
只包含 otp
属性。
为了改造以正确映射,您必须定义两个数据 classes,一个用于父响应,一个用于 otpData
把TestResponse.kt
改成这个
data class TestResponse(
@SerializedName("code")
@Expose
val code: String,
@SerializedName("data")
@Expose
val otpData: OtpData,
@SerializedName("message")
@Expose
val message: String
)
现在,创建OtpData.kt
data class OtpData(
@SerializedName("otp")
@Expose
val otp: String,
@SerializedName("otpId")
@Expose
val otpId: Int
)
这是我的代码
interface ApiService {
@POST("sms-otp/request")
suspend fun loginTest(@Body testRequest: TestRequest): Response<TestResponse>
}
data class TestResponse(
@SerializedName("otp")
@Expose
var otp : String? = null,
@Expose
@SerializedName("otpId")
var otpId: Int? = null
)
逻辑-
loginRepository.loginTest(testRequest.phoneNumber!!).let {
if (it.isSuccessful) {
_res.postValue(Resource.success(it.body()))
Log.d("_res", it.body().toString())
Log.d("_res" , _res.value.toString())
Log.d("_res", _res.value?.data.toString())
} else {
_res.postValue(Resource.error(it.errorBody().toString(), null))
}
}
这是我的日志,我认为响应代码是 201,也许成功但我的模型中没有数据...请帮助我
enter image description here
您正在从服务器收到响应,如 okhttp
日志记录所示。但是,改造无法映射它。因为您的响应有错误的 kotlin 数据 class。
{
"code": "0000",
"message": "ok",
"data": {
"otpId": 21,
"otp": "518793"
}
}
响应在 data
对象中有 otpData
,但您的 TestResponse
只包含 otp
属性。
为了改造以正确映射,您必须定义两个数据 classes,一个用于父响应,一个用于 otpData
把TestResponse.kt
改成这个
data class TestResponse(
@SerializedName("code")
@Expose
val code: String,
@SerializedName("data")
@Expose
val otpData: OtpData,
@SerializedName("message")
@Expose
val message: String
)
现在,创建OtpData.kt
data class OtpData(
@SerializedName("otp")
@Expose
val otp: String,
@SerializedName("otpId")
@Expose
val otpId: Int
)