簡単な答え:IOを扱う場合は、IOExceptionsを扱います。IOを処理しない場合、IOExceptionsはバグのあるコードの症状であるため、チェックされていない例外に変換する必要があります。
長い答え:
readValue常にを取りますJsonParser。これはIO(ファイルやURLなど)にラップされる場合があります。IOを扱っている場合、IOExceptionsを扱う方法はありません。それらを処理するか、何らかの方法でそれらを再スロー/パスする必要があります。IO中には何でも発生する可能性があるため、例外に対処する準備をしておく必要があります。
ただし、インスタンスがIOを使用していないことが確実な場合JsonParser(たとえば、文字列にJSONパーサーを作成するために使用した場合)、受け取ったものはコードまたはJacksonのいずれかでバグでJsonFactory#createJsonParser(java.lang.String)あると見なすことができます。IOException通常、チェックされていない例外をスローすることが、それを処理する適切な方法です。
ObjectMapper om = new ObjectMapper(/* whatever */);
JsonParser jp = JsonFactory.createJsonParser("{ \"foo\": \"bar\" }");
try {
return om.readValue(jp);
} catch (IOException e) {
throw new AssertionError("An IOException occurred when this was assumed to be impossible.");
}
注意:私のJavaは錆びており、Jacksonを使用したことがないので、上記のブロックを擬似コードと見なしてください。
いずれの場合も、チェックされていない例外であるため、で宣言AssertionErrorする必要はありません。throwsサブクラスであるjava.lang.RuntimeExceptionか、java.lang.Error明示的にキャッチまたは再スローする必要がないものすべて。これらの例外は、バグのあるコードを処理している場合、またはVMのホストが起動している場合を除いて、発生することが予想されない問題に使用されます。