簡単な答え:IOを扱う場合は、IOException
sを扱います。IOを処理しない場合、IOException
sはバグのあるコードの症状であるため、チェックされていない例外に変換する必要があります。
長い答え:
readValue
常にを取りますJsonParser
。これはIO(ファイルやURLなど)にラップされる場合があります。IOを扱っている場合、IOException
sを扱う方法はありません。それらを処理するか、何らかの方法でそれらを再スロー/パスする必要があります。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のホストが起動している場合を除いて、発生することが予想されない問題に使用されます。