我正在使用Retrofit2向我的服务器发送和接收请求。
以下是我的API接口和Model类。
接口
public interface ApiInterface {
@POST("/users/")
Call<User> signUp(@Body User user);
@POST("/login_url/")
Call<User> login(@Body User user);
}
改造客户端
public class RetrofitClient {
private static Retrofit retrofit = null;
public static Retrofit getRestClient(String baseUrl) {
if (retrofit == null) {
retrofit = new Retrofit.Builder().baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
}
POJO班
public class User {
@SerializedName("id")
private Integer id;
@SerializedName("email")
@Expose
private String email;
@SerializedName("first_name")
private String firstName;
@SerializedName("last_name")
private String lastName;
@SerializedName("password")
@Expose
private String password;
}
我已经公开了电子邮件和密码,因此在登录请求中将添加这两个参数。 但是对于像注册这样的另一个请求,我还需要一个名字和姓氏以及电子邮件和密码。
我可以使用相同的&#34;用户&#34;两个班级?因为如果我公开了名字和姓氏,那么这些字段也将在登录请求中发送。
还有其他方法或者我应该为这两个请求制作不同的POJO课程吗?
答案 0 :(得分:2)
您可以使用 @Field 注释,而不是发送整个班级,因此您的登录回调将是这样的:
@FormUrlEncoded
@POST("/login_url/")
Call<User> login(@field("email")String email,@field("password")String password);
@FormUrlEncoded 表示请求正文将使用表单URL编码。字段应声明为参数,并使用 @Field 进行注释。
答案 1 :(得分:0)
我可以为两者使用相同的
"User"
类吗?
是,您可以对两个请求使用与 Model
相同的 @Body
!
只需确保您不需要required variables
只需省略 !!
删除@SerializedName
和@Expose
,这些不是必需的,并根据 json KEYs
variable names
public class User {
private Integer id;
private String email;
private String firstName;
private String lastName;
private String password;
}
修改强>
例如,假设您需要一个请求: -
您将模型用户设置为
的4个参数 new User(id,email,firstname,lastname); // dont init the password attribute
5个参数您将所有值设置为model
new User(id,email,firstname,lastname,password);