gpt4 book ai didi

java - 如果响应与帖子类不同,如何从帖子请求中获得响应

转载 作者:行者123 更新时间:2023-11-30 10:03:36 25 4
gpt4 key购买 nike

我正在使用改造通过 API 将登录详细信息传递到我的服务器。 api 的发布请求只接受电子邮件和密码,但响应返回与 POJO 类包含的内容不同的 Json 格式。如何处理 API 响应?

我尝试将响应作为 JSONObject 返回以帮助从 api 获取 Json,但它不起作用。API 返回包含用户名和登录 token 的成功 json。

    Call<LoginPost> call = apiLink.loginUser(useremail, userpassword);

call.enqueue(new Callback<LoginPost>() {
@Override
public void onResponse(Call<LoginPost> call, Response<LoginPost> response) {
if(!response.isSuccessful()){
String code = Integer.toString(response.code());
Toast.makeText(LoginPage.this, code, Toast.LENGTH_LONG).show();
}
else {
LoginPost postResponse = response.body();

Log.e("viewResponse",
postResponse.getSuccessResponse().toString());

return;
}
}

@Override
public void onFailure(Call<LoginPost> call, Throwable t) {
Log.e("error in createNewUser", t.getMessage());
}
});

帖子类:

@SerializedName("email")
String userEmail;


@SerializedName("password")
String userPassword;

public JSONObject getSuccessResponse() {
return successResponse;
}

@SerializedName("success")
JSONObject successResponse;


public String getUserEmail() {
return userEmail;
}


public String getUserPassword() {
return userPassword;
}

最佳答案

在进行 Retrofit 调用时,与其使用请求的 POJO 类,不如使用匹配响应的 POJO 类。因为这只是使用参数进行调用,所以您可能甚至不需要 Request 对象,但拥有一个也没有坏处。

你的代码看起来像这样:

Call<LoginResponse> call = apiLink.loginUser(useremail, userpassword);

call.enqueue(new Callback<LoginResponse>() {
@Override
public void onResponse(Call<LoginResponse> call, Response<LoginResponse> response) {
if(!response.isSuccessful()){
String code = Integer.toString(response.code());
Toast.makeText(LoginPage.this, code, Toast.LENGTH_LONG).show();
}
else {
LoginResponse postResponse = response.body();

Log.e("viewResponse",
postResponse.getSuccessResponse().toString());

return;
}
}

@Override
public void onFailure(Call<LoginResponse> call, Throwable t) {
Log.e("error in createNewUser", t.getMessage());
}
});

为了进一步解释发生了什么,当你创建你的参数化调用时,你告诉 Retrofit 使用哪个对象来解析响应,(如果你想使用一个对象作为 post body 数据,你需要以不同的方式声明你的 API) :

 @POST("auth/login")
Call<LoginResponse> loginUser(@Body LoginPost body);

Call<LoginResponse> call = apiLink.loginUser(LoginPost body);

关于java - 如果响应与帖子类不同,如何从帖子请求中获得响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56299895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com