📅  最后修改于: 2023-12-03 15:09:02.388000             🧑  作者: Mango
在Java开发中,我们经常会需要调用其他API接口,但无法保证我们调用的接口总是返回正确的结果。当调用出现错误时,我们可能会得到一个包含有错误信息的 body。为了便于后续处理,我们需要将 body 转换为相应的 Java 对象,这就需要将 errorBody 转换为 POJO(Plain Old Java Object)对象。
首先,我们需要创建对应的 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
}
接下来,我们需要将 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;
}
}
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 类型和异常类型。