Retrofit response.errorBody 无法转换为 JsonObject 或 Java Object

Retrofit response.errorBody cannot be converted to JsonObject or Java Obejct

当调用 API 时,它 return onScuccess 中的一个对象,状态代码为 201,当不在 onSuccess 中时,状态代码为 422,它也会给出这样的对象

{
    "errors": [
         "Usuário não encontrado"
    ]
}

我尝试了很多方法,包括使用此代码的改造官网

public class ErrorUtils {


public static APIError parseError(Response<JsonObject> response) {

    Converter<ResponseBody, APIError> converter =
            ServiceGenerator.retrofit()
                    .responseBodyConverter(APIError.class, new Annotation[0]);

    APIError error;

    try {
        error = converter.convert(response.errorBody());
    } catch (IOException e) {
        Log.v("LoginUser", "IOException -> " + e.getMessage());
        return new APIError();
    }

    return error;
}

public static class ServiceGenerator {
    public static final String API_BASE_URL = ApiClient.BASE_URL;

    private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder();

    public static Retrofit retrofit = null;

    private static Retrofit.Builder builder =
            new Retrofit.Builder()
                    .baseUrl(API_BASE_URL)
                    .addConverterFactory(GsonConverterFactory.create());

    public static Retrofit retrofit() {
        retrofit = builder.client(httpClient.build()).build();
        return retrofit;
    }
}}

API 错误 Class

public class APIError {
private String[] errors;

public String[] getErrors() {
    return errors;
}

public void setErrors(String[] errors) {
    this.errors = errors;
}

@Override
public String toString() {
    return "ClassPojo [errors = " + errors + "]";
}}

但是这样它会进入 Error Utils class 的 catch 块,异常是

End of input at line 1 column 1 path $

解决此问题将不胜感激。但是请记住,我已经彻底查看了这两个错误,然后我 post 这个问题。

在您的 onResponse 回调方法中尝试此代码

                if (response.isSuccessful() && response.code() == 201) {

                      // Todo

                } else {

                    if (response.errorBody() != null) {

                        try {

                            JSONObject jsonObject = new JSONObject(response.errorBody().string());

                            JSONArray jsonArray = jsonObject.getJSONArray("errors");

                            List<String> errorStringList = new ArrayList<>();

                            for (int i = 0; i < jsonArray.length(); i++) {

                                errorStringList.add(jsonArray.get(i).toString());

                            }


                        } catch (JSONException | IOException e) {

                            e.printStackTrace();

                        }

                    }

                }

您可以将 errorStringList 传递给 ApiError

的实例

ApiError apiError = new ApiError();

apiError.setError(errorStringList.toArray(new String[0]))