Androidクライアントにネットワークコール用にokhttpを実装しました。
失敗応答を受け取ると、失敗コードとコードに関連するテキストをメッセージとして受け取りますが、サーバーが送信するカスタム失敗応答を受け取りません。実装されたコードでの失敗応答では、私が受け取るメッセージは「Bad Request」だけです。
サーバーから返されたエラーメッセージを取得するにはどうすればよいですか?
私のコード
private void executeCall(Request request, final ResponseListener listener) {
mOKHttpClient.newCall(request)
.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
postFailure(listener, (String) call.request()
.tag(),e.toString());
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
String responseString = response.body().string();
postSuccess(listener, (String)call.request().tag(), responseString);
}
else {
postFailure(listener, (String)call.request().tag(),response.code()+","+response.message());
}
}
});
}
body()
はHTTPステータスメッセージを返すため、response.message()
によるエラー応答をキャッチする必要があります。
あなたが提供するスクリーンショットでは:
Statusは、OkHttp
(response.code()
の場合はHTTPステータスコード、_400
_はHTTPの場合response.message()
)あなたのケースでは_Bad Request
_であるステータスメッセージ。
応答の本文(成功または失敗)はresponse.body()
です。そして、それをString
として取得したい場合は、response.body().string()
を呼び出します。
_@Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.isSuccessful()) {
String responseString = response.body().string();
postSuccess(listener, (String)call.request().tag(), responseString);
}
else {
String errorBodyString = response.body().string();
postFailure(listener, (String)call.request().tag(),response.code()+","+errorBodyString);
}
}
_
コメント通り:
応答からMessage
オブジェクトを読み取りたいので、次のようにします。
_JSONObject = new JSONObject (response.body().string());
String messageString =object.getString("Message");
_
あなたがしようとしている場合get(okhttp3.ResponseBody)errorResponse from Retrofit responseこれを実行します。
// Retrofit onResponseCall
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response.errorBody() != null) {
try {
Log.e("errorResponse","" + response.errorBody().string());
} catch (IOException e) {
e.printStackTrace();
}
}
}