📜  如何在改造中将 errorBody 转换为 pojo - Java (1)

📅  最后修改于: 2023-12-03 15:09:02.388000             🧑  作者: Mango

如何在改造中将 errorBody 转换为 pojo - Java

在Java开发中,我们经常会需要调用其他API接口,但无法保证我们调用的接口总是返回正确的结果。当调用出现错误时,我们可能会得到一个包含有错误信息的 body。为了便于后续处理,我们需要将 body 转换为相应的 Java 对象,这就需要将 errorBody 转换为 POJO(Plain Old Java Object)对象。

步骤
1. 创建 POJO 类

首先,我们需要创建对应的 POJO 类,用于接收错误信息。例如,当API调用出现400错误时,API可能返回以下错误信息:

{
    "message": "Bad Request",
    "status": 400,
    "error": "Bad Request",
    "path": "/api/users"
}

那么我们需要创建一个对应的 POJO 类如下:

public class ApiError {
    private String message;
    private int status;
    private String error;
    private String path;
    // getter setter
}
2. 解析错误信息

接下来,我们需要将 errorBody 转换为 POJO 对象。我们可以使用 Retrofit 的拦截器来实现这个过程。具体步骤如下:

  • 创建一个拦截器类来处理错误信息。该类实现 Interceptor 接口,比如我们可以命名为 ErrorInterceptor
public class ErrorInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
        Response response = chain.proceed(chain.request());

        if (!response.isSuccessful()) {
            String errorBodyStr = response.body().string();
            ApiError apiError = new Gson().fromJson(errorBodyStr, ApiError.class);

            throw new ApiException(apiError.getStatus(), apiError.getMessage());
        }

        return response;
    }
}
  • 在 Retrofit 的构建器中添加该拦截器。
OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new ErrorInterceptor())
    .build();

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .client(client)
    .build();

这样,当 API 调用返回错误时,就会抛出 ApiException 异常。

try {
    Response<User> response = apiService.getUser(1).execute();
}
catch (ApiException e) {
    // handle error with e.getMessage()
}
总结

通过上述步骤,我们成功的将 errorBody 转换为 POJO 对象,并且在有异常时抛出了 ApiException 异常。这样我们就可以方便的处理错误信息了。同时,在实际使用中可以根据具体需求,改变错误信息的 POJO 类型和异常类型。