如何对post body对象使用@SerializedName注释

时间:2017-10-28 19:31:35

标签: java android json api retrofit2

我创建了一个api服务接口

package com.rohitkhatri.app.services;

import com.rohitkhatri.app.models.Login;
import com.rohitkhatri.app.models.User;

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.POST;

public interface ApiService {
    @POST("user/authenticate")
    Call<User> login(@Body Login login);
}
package com.rohitkhatri.app.models;

import com.google.gson.annotations.SerializedName;

public class Login {
    @SerializedName("country_code")
    private String countryCode;
    @SerializedName("mobile_no")
    private String mobileNo;
    private String otp;

    public Login(String countryCode, String mobileNo, String otp) {
        this.countryCode = countryCode;
        this.mobileNo = mobileNo;
        this.otp = otp;
    }

    public String getCountryCode() {
        return countryCode;
    }

    public String getMobileNo() {
        return mobileNo;
    }

    public String getOtp() {
        return otp;
    }
}

这是api所需的请求参数:

{
    "country_code": "91",
    "mobile_no": "9XXXXXXXXX",
    "otp": "348783"
}

但是当我记录请求时,它会发送以下json作为正文

{"countryCode":"91","mobileNo":"9XXXXXXXXX","otp":"348783"}

因为java对象中的名称不同,并且api调用需要该名称,所以它给出了错误。

有没有办法在调用中使用@SerializedName注释或任何其他方式更改它?

我的问题是,当我们使用此模型作为呼叫的响应时,它正在工作,但如果我想发送呼叫并传递此对象,则发送数据不包含序列化名称字段。

1 个答案:

答案 0 :(得分:1)

也使用@Expose注释。它经常被遗忘使用。