首页 > 解决方案 > 有没有办法传递@Body 的参数而不是多个@Field

问题描述

我有一个后端服务器,想要使用正文参数进行 Http POST 调用。

我创建了一个 Post 请求,其中 @Header 带有 api 密钥,@Body 带有用户信息。但是当我点击 api 时,它会显示这样的响应“数据”:[],它应该像“数据”:{}。但是如果我发送多个@Field 作为参数,那就没问题了。有没有使用@Body 而不是多个@Field 的过程

SignInInfo.kt

data class SignInInfo(
    @SerializedName("name") val name: String,
    @SerializedName("email") val email: String,
    @SerializedName("user_type") val userType: String,
    @SerializedName("phone") val phone: String,
    @SerializedName("password") val password: String
)

api.kt

@POST(Constants.API_USER_REGISTRATION)
fun registerUser(
    @Body signInInfo: SignInInfo
): Call<RegistrationResponse>

api.kt

@FormUrlEncoded
@POST(Constants.API_USER_REGISTRATION)
fun registerUser(
    @Field("name") name: String,
    @Field("email") email: String,
    @Field("user_type") user_type: String,
    @Field("phone") phone: String,
    @Field("password") password: String
): Call<RegistrationResponse>

我在使用 @Field 参数时得到了这个预期的答案

{
    "status": 1,
    "data": {
        "id": 135386,
        "user_id": 1567057386,
        "token": "geYs2rO6wjtO653I9OVhJWTFwYxAvnYnLGG7wm7dfa"
    },
    "msg": "Welcome Aomi"
}

我在使用@Body 参数时得到了这个意想不到的答案

{
    "status": 2,
    "data": [],
    "msg": "Failed"
}

标签: androidkotlinretrofit2httpresponse

解决方案


您的 Body 数据类应如下所示

data class Body(
    @SerializedName("status")
    val status: Int? = 0,
    @SerializedName("data")
    val `data`: Data? = Data(),
    @SerializedName("msg")
    val msg: String? = ""
)

data class Data(
        @SerializedName("id")
        val id: Int? = 0,
        @SerializedName("user_id")
        val userId: Int? = 0,
        @SerializedName("token")
        val token: String? = ""
)

如果你想得到这种 json

{
    "status": 1,
    "data": {
        "id": 135386,
        "user_id": 1567057386,
        "token": "geYs2rO6wjtO653I9OVhJWTFwYxAvnYnLGG7wm7dfa"
    },
    "msg": "Welcome Aomi"

和使用

@POST(Constants.API_USER_REGISTRATION)
fun registerUser(
    @Body signInInfo: Body
): Call<RegistrationResponse>

推荐阅读