2015-12-07 20 views
11

Retrofitを使用して、WebサーバーでPOSTリクエストを作成しています。Retrofit 2 - レスポンスステータスが422(処理不能なエンティティ)の場合のレスポンスボディヌル

しかし、応答ステータスが422 (unprocessable entity)の場合、応答本体を取得できないようです。応答本文は常にnullです。

私は何か間違っているのか、これに対する回避策があるかどうかを知りたいと思います。私はPostmanと同じjsonを要求に使用しているので、本体を正常に返します。

これはメソッドです:

@Headers("Content-Type: application/vnd.api+json") 
@POST("my_endpoint") 
Call<JsonObject> postEntry(@Header("Authorization") String authorization, @Body JsonObject json); 

体はJsonObjectで、私はドキュメントのようにシリアライズないよと言います。しかし、私はこれが問題だとは思わない。

ご協力いただきありがとうございます。

+0

を見てみましょう高度な何かが必要な場合は、 '422'のエラーでいくつかのボディを返すあなたのAPIである

@Override public void onResponse(Response<JsonObject> response, Retrofit retrofit) { if (response.isSuccess()) { response.body(); // do something with that } else { response.errorBody(); // do something with that } } 

?。:一般的なアプローチは、このようなものになるだろうあなたはアンドロイドでマップしましたか? –

+0

@DeividiCavarzanはい、質問で言及したように、私がPostmanを使ってリクエストをすると、ボディが完全に返されます。私は両方の場所で同じjsonオブジェクトを使用しています。 –

+0

@DeividiCavarzanマッピングについては、そうでした。実際には、 'response.body()== null'の' onResponse(レスポンスレスポンス、Retrofit retrofit) 'をコールバックで実行します。 –

答えて

9

デフォルトでは、サーバがエラーコードresponse.body()を返すときは常にnullです。あなたが探しているものはresponse.errorBody()です。あなたが本当にInterceptorshow to use them

+1

と比較してください。しかし、私のerrorBody()も常にnullです。私はそれを改造なしで動作させることができました。私はそれが期限切れになるのであなたに報奨金を与えています –

+0

Ty。インターセプターを介して、フードの下で何が起こっているのかを調べ、生の要求と応答を見ることができます。とにかく私はあなたが方法を見つけてうれしいです:) – tochkov

関連する問題