如何从数组体中获取 Retrofit 2 错误

How to get Retrofit 2 error from array body

我目前的回复是

{"response":"validation error","status":"failure","code":400,"errors":["You can not add multiple items with different categories"]}

我当前的代码是:

String errorBody = response.errorBody().string();

JSONObject jsonObject = new JSONObject(errorBody.trim());
jsonObject = jsonObject.getJSONObject("errors");
Iterator<String> keys = jsonObject.keys();
String errors = "";
while (keys.hasNext()) {
     String key = keys.next();
     JSONArray arr = jsonObject.getJSONArray(key);
     for (int i = 0; i < arr.length(); i++) {
       errors += key + " : " + arr.getString(i) + "\n";
     }
}

我正在尝试获取错误代码以查看它是否与特定关键字匹配以处理响应

我认为您当前的代码不太好,对您来说更好的方法是:

为您的 json 输出创建模型类,并在改造调用中写入:

if (model.status=='failure' || model.code==400){

print(response.message) // 或者像这样的东西

}

你可以通过下面的代码片段看一下

call.enqueue(new Callback<PagedResponse<NotificationModel>>() {
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
        @Override
        public void onResponse(Call<PagedResponse<NotificationModel>> call, Response<PagedResponse<NotificationModel>> response) {

            if (response.isSuccessful()) {
                if (response.code() == 200) {
                    try {
                        PagedResponse<NotificationModel> notifications = (PagedResponse<NotificationModel>) response.body();

                        tvRecordsCount.setText("Total "+response.body().getTotal()+" Notifications ");
                        showNotification(notifications);
                    } catch (Exception e){
                        e.printStackTrace();
                    }

                } else {
                    showToast(getApplicationContext(), "Server Error");
                }
            }
        }


        @Override
        public void onFailure(Call<PagedResponse<NotificationModel>> call, Throwable t) {

            showToast(getApplicationContext(), t.getMessage());
        }
    });

我设法让它与这段代码一起工作:

String errors = "";
String errorBody = response.errorBody().string();
JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(errorBody.trim()).getAsJsonObject();
JsonArray errorArray = rootObj.getAsJsonArray("errors");
for (JsonElement pa : errorArray) {
    errors = pa.getAsString();
}