🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
RxJava

RxJavaは、リアクティブプログラミングができるReactiveXのJava向けの実装。軽量であり、その他のライブラリへの依存がなく、RxJavaのjarをパスに通せば使用できます。バージョン2.3からはAndroidもサポートしています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

1714閲覧

retrofit2でのエラーハンドリングについて

daisuke777

総合スコア0

RxJava

RxJavaは、リアクティブプログラミングができるReactiveXのJava向けの実装。軽量であり、その他のライブラリへの依存がなく、RxJavaのjarをパスに通せば使用できます。バージョン2.3からはAndroidもサポートしています。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2020/05/04 11:45

編集2020/05/05 08:59

はじめに

retrofitを最近触り始めたのですが、
エラーハンドリングがうまくできず…
皆さんのお力を貸していただければ幸いです。

内容

###やりたいこと
エラーレスポンスが返ってきた際も201などと同様に、「null」ではなく、レスポンスとして返した内容(Object)を埋め込みたい

現状

 バックエンドからエラーステータス(今回は「409」)を返しており、
Client側でもエラーステータスを正しく受けとるが、レスポンスボディに「null」が埋め込まれている(Response.java)。
※rawResponse, body, errorBody)の中の”body”が該当
・rawResponseはここでは気にしない
・errorBodyは正しいものが表示される

retrofit2公式Githubhttps://github.com/square/retrofit/blob/master/retrofit/src/main/java/retrofit2/Response.java

下記↓今回使用したInterface.java

Interface.java

1@POST("/api/family/{family_id}/menber/{member_id}) 2Observable<Menber> postMenber(@Header("Authorization") String token, 3 @Path(value = "family_id") String FamilyID, 4 @Path(value = "member_id") String MenberID, 5 @Body Member member);

下記↓上記Interface使用箇所

Activity.java

1Response<Menber> resPostMenber = postMenber(fragment.sessionManager.getJwtToken(), 2 family_id, 3 member_id, 4 requestMenber) 5 .execute();

おそらく、retrofit2の下記仕様により、現在の事象が起きてしまっている(?)と思われるのですが
なにか対応できる方法がないか探しています。

  • status >= 400の場合、一律bodyをnullで返す

もしご存知であればご教示いただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/04 14:09

bodyがあるかerrorbodyがあるかで場合分けをするのではダメなんでしょうか。
daisuke777

2020/05/05 02:37

ご回答ありがとうございます。書き方が不十分で申し訳ないです。 ハンドリング自体はStatusCodeの場合分けでできています。 ただ、今回はerrorStatusが返ってきた際にbodyに「null」ではなく、レスポンスとして返した内容(Object)を埋め込みたく、そういった方法があればご教示いただきたいです。
退会済みユーザー

退会済みユーザー

2020/05/05 03:29

うーんと、エラーのときには > ・errorBodyは正しいものが表示される のだから、これを見ればいいだけでは?
nakasho_dev

2020/05/05 09:45

前回の質問と違う点は何ですか?
kakajika

2020/05/08 23:52

Interfaceの方ではObservableで定義しているのに使用箇所の方ではexecuteを呼んでいるのはおかしいような…?RxJava2使っているのか使っていないのかどっちなんでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問