我想根据准则体系结构和CleanCode规则提供清晰的代码。
我试图使用gson库对改造调用中使用的数据进行序列化。
我知道我可以在模型类中使用@SerializedName,但是我想学习如何使用gson builder。
在MainActivity中,我有:
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CredentialModel credentials = new CredentialModel("User", "Password");
Gson gson = new GsonBuilder().serializeNulls().create();
String json = gson.toJson(credentials);
UserApiClient userApiClient = RetrofitInstace.getRetrofitInstance().create(UserApiClient.class);
Call<String> call = userApiClient.login(json);
call.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
toastNotify(String.valueOf(response.code()));
}
@Override
public void onFailure(Call<String> call, Throwable t) {
toastNotify("Fail");
}
});
}
});
Interface UserApiClient:
@POST("/api/AppUser/login")
Call<String> login(@Body String credentials);
RetrofitInstance类:
public static Retrofit getRetrofitInstance() {
if (retrofit == null) {
retrofit = new retrofit2.Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(new OkHttpClient())
.build();
}
return retrofit;
}
当邮递员将数据从调试模式下的json变量复制到正文时,我收到400错误代码,这给我代码200。这不是我的服务,所以我不知道服务器端要做什么。也是我在android中的新功能,尚不知道如何在android studio中检查原始请求。
答案 0 :(得分:0)
您使用的是GsonConverterFactory.create()
,但是您正在Call<String> login(@Body String credentials);
传递String。你不能那样做。
您需要传入由gson序列化的POJO。否则,改型将传入空对象作为主体。
class MyBody {
// serialize it here
}
// You also cannot use a String at Call<String>
// for now use ResponseBody. Create a POJO class later though
Call<ResponseBody> login(@Body MyBody credentials);
您想要做的事已经在改造中完成了。
// retrofit does this for you underneat when you use GsonConverterFactory.create()
Gson gson = new GsonBuilder().serializeNulls().create();
String json = gson.toJson(credentials);