1

当调用 API 时,它在 onSuccess 中返回一个对象,状态码为 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 错误类

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 类的 catch 块,异常是

End of input at line 1 column 1 path $

对此问题的解决方案将不胜感激。但请记住,对于这两个错误,我已经彻底查看了 SO,然后我发布了这个问题。

4

1 回答 1

1

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]))

于 2020-12-04T14:48:28.823 回答