Java 安卓改型:Can';t当响应代码为时,将返回的JSON响应转换为指定的模型类!=200

Java 安卓改型:Can';t当响应代码为时,将返回的JSON响应转换为指定的模型类!=200,java,android,json,retrofit,retrofit2,Java,Android,Json,Retrofit,Retrofit2,JSON 当成功代码==200时 { "data": { "user": { "id": 8, "name": "soleekuser", "email": "soleekuser@gmail.com", "job_title": "back end developer", "active": 1, "profile_pic": "http://52.174.22.188/soleekappa

JSON

当成功代码==200时

{
"data": {
    "user": {
        "id": 8,
        "name": "soleekuser",
        "email": "soleekuser@gmail.com",
        "job_title": "back end developer",
        "active": 1,
        "profile_pic": "http://52.174.22.188/soleekappapi/public/storage/profile_pics/Capture_1544361563.jpeg",
        "created_at": "2018-12-09 13:20:37"
    },
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjgsImlzcyI6Imh0dHA6Ly81Mi4xNzQuMjIuMTg4L3NvbGVla2FwcGFwaS9wdWJsaWMvYXBpL3VzZXJzL2xvZ2luIiwiaWF0IjoxNTQ0NjA1MDQ3LCJleHAiOjE1NDU4MTQ2NDcsIm5iZiI6MTU0NDYwNTA0NywianRpIjoiQk1sWTJ5NlVma043V0VhayJ9.npPbsHtV7G65jauwxltyvqS_xP7TmJetP9bTfTd9GB8"
},
"message": "Login Successfully",
"error": null
}
当我尝试使用错误的凭据(电子邮件或密码)进行身份验证时 响应代码==400(或任何其他非200代码)

模范班

public class Employee implements Serializable {

@SerializedName("data")
@Expose
private Data data;
@SerializedName("message")
@Expose
private String message;
@SerializedName("error")
@Expose
private String error;

public Employee() {
}

public Employee(Data data, String message, String error) {
    this.message = message;
    this.error = error;
    this.data = data;
}
// Getters & Setters
}
当“data”对象丢失时,我应该如何使它将返回的JSON转换为模型类?(响应代码!=200)

我认为即使缺少属性,改型也会自动将响应json转换为模型

更重要的是

 call.enqueue(new Callback<Employee>() {
            @Override
            public void onResponse(Call<Employee> call, Response<Employee> response) {

                Log.e(TAG_FRAG_LOGIN, "Response code -> " + response.code() + " " + response.message() + " ");
                if (response.code() == 200) {
                    if (response.body() != null) {

                        // do stuff
// Everything works just fine when response code == 200, the body is not null.
                    }
                } else if (response.code() != 200){
                    Log.d(TAG_FRAG_LOGIN, "Response code ------> " + response.code() + " " + response.message() + " " + call.request().toString());
                    if (response.body() != null) {

                        // do stuff
// When response code != 200 the (response.body()) is always null

                    }
                }
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
Log.e(TAG_FRAG_LOGIN,“响应代码->”+Response.code()+“”+Response.message()+“”);
if(response.code()==200){
if(response.body()!=null){
//做事
//当响应代码==200时,一切正常,主体不是空的。
}
}else if(response.code()!=200){
Log.d(TAG_FRAG_LOGIN,“响应代码------->”+Response.code()+“”+Response.message()+“”+call.request().toString());
if(response.body()!=null){
//做事
//当响应代码!=200时,(response.body())始终为空
}
}

当响应代码!=200时,为什么response.body()始终为空?

尝试使用通用方法处理错误消息。。 像这样

/**
 * this method used method response give error.
 *
 * @param context
 * @param response
 */
public static void getResponseErrorMessage(Context context, String str, Response response) {
    if (response.code() == 401 || response.code() == 400) {
        try {
            Gson gson = new Gson();
            CommonErrorModel errorModel = gson.fromJson(response.errorBody().string(), CommonErrorModel.class);
            showAlertDialog(context, str, errorModel.message == null ? context.getString(R.string.something_went_wrong) : errorModel.message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    } else if (response.code() == 500) {
        showAlertDialogMessage(context, str, context.getString(R.string.something_went_wrong));
    } else {
        showAlertDialogMessage(context, str, context.getString(R.string.something_went_wrong));
    }
}
此方法调用了api response..onResponse()方法

还可以像这样生成错误消息pojo类

public class CommonErrorModel {

@SerializedName("status")
public int status;

@SerializedName("message")
public String message;

}

当响应中缺少数据对象时,它被视为与用于创建模型的响应不同的响应。这就是为什么它为空。当没有数据时,您可以从web服务传递空白数据对象。这意味着您将获得与状态为200时相同的响应,但数据对象将没有数据

if (response != null && response.isSuccessful() && response.body() != null) {
  }
 else{
      getResponseErrorMessage(mContext, getString(R.string.app_name), response);
   }
public class CommonErrorModel {

@SerializedName("status")
public int status;

@SerializedName("message")
public String message;