2017-02-04 5 views
1

JsonオブジェクトをJavaオブジェクト(POJO)に逆シリアル化するためにjacksonオブジェクトマッパーを呼び出すRxJavaを使用するメソッドがあります。 readValueメソッドは、自分のメソッドの呼び出し側に処理またはスローされなければならないIOExceptionをスローします。私はここでそれを扱うべきではなく、むしろ私の呼び出し側にそれを処理させるべきです。 RxJavaでこれを行うにはどうすればいいですか?通常は、私のメソッドシグネチャにはthrows IOExceptionが追加されています。ここでRxJava 1.xを使用して、発信者まで例外をスローする方法

は私のコードです:

public Observable<T> findByIdAsync(String id) throws IOException { 
    return datasource 
      .getBucket() 
      .async() 
      .get(String.valueOf(id), RawJsonDocument.class) 
      .map(json -> objectMapper.readValue(json.content(), getType())); 
} 

objectMapper.readValue(json.content(), getType())IOExceptionをスローしますので、それはキャッチまたはスローされるようにいずれかがあります。

+0

呼び出し元が 'onError'を実装しておらず、例外がスローされた場合、' OnErrorNotImplementedException'が得られます。実装されている場合、 'onError'ブロックで処理されます。 'throws 'を持つことは、RxJavaで実装する方法ではありません。 –

答えて

3

だけfromCallableを使用してObservableにあなたのreadValueメソッドをラップ:

その観測を返し、観察者がそれに加入する際に、ユーザーが指定し、その関数から返された値を発する機能を呼び出します。 (流れのどこかに扱われていない場合)

.flatMap(json -> Observable.fromCallable(() -> 
         objectMapper.readValue(json.content(), getType()))) 

ストリームとSubscriber'sonErrorコールバックを中断しますCallableにスローされたException

がトリガされます。

関連する問題