我无法解析改造后的 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
)