简短的回答:如果你处理IO,你处理s。如果您不处理 IO,则 s 应转换为未经检查的异常,因为它们是错误代码的症状。IOException
IOException
更长的答案:
readValue
总是采用 一个 ,它可以包裹在 IO 周围(例如,文件或 URL)。如果您正在处理IO,则无法处理,您应该处理它们或以某种方式重新删除/传递它们。在 IO 期间可能发生任何事情,您应该准备好处理异常。JsonParser
IOException
但是,如果您确定您的实例不使用 IO(例如,您曾经在字符串上创建 JSON 解析器),则可以假设您收到的任何 都是 bug,无论是在代码中还是在 Jackson 中。通常,抛出一个未经检查的异常是处理它的正确方法:JsonParser
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.");
}
Nota bene:我的Java很生锈,我从来没有使用过Jackson,所以把上面的块看作是伪代码。
在任何情况下,您永远不需要在 中声明,因为它们是未经检查的异常。所有属于 或 不需要显式捕获或重写的子类。这些异常用于预期不会发生的问题,除非你正在处理有缺陷的代码或 VM 的主机着火了。AssertionError
throws
java.lang.RuntimeException
java.lang.Error