woshidan's blog

あいとゆうきとITと、とっておきの話。

RetrofitのError時のResponseがParseできない

今日の実装箇所は、1つのエラーコードに対しエラーが3つ以上存在するということで、 どうしてもレスポンスボディが欲しかったのですが、RetrofitのError時のResponseが うまくParseできなくて詰まってました。

stackoverflow.com

qiita.com

上の記事を参考にして、

// error is RetrofitError
String json =  new String(((TypedByteArray)error.getResponse().getBody()).getBytes());

// Person is some parse class for GSon
Gson gson = new Gson();
Person person = gson.from(json, Person.class);

みたいにすると、成功時と同じように扱えます。

しかしこれ、ConverterにGson指定して、 成功時の返り値に指定しているクラスを手動でGsonのインスタンスに突っ込んでるのと同じことでは...。

GC: TypedByteArray - retrofit.mime.TypedByteArray (.java) - GrepCode Class Source

TypedByteArray、コードとしては、この辺なのだけど、変換先のクラスが不定なのでデータはStream状でしまってあり、ひよっこからするとどう取り出したら良いものやら、という話だったような気がする。

一旦Streamの形かBytes列で取り出してからStringなり元のResponseとおぼしき型にする、みたいに見えるけれど...今日はここまで。。