@ExceptionResolver
@ShellComponent
类可以使用 @ExceptionResolver
方法来处理组件方法的异常。这些方法适用于带注解的方法。
该异常可能与传播的顶级异常相匹配(例如,直接抛出的 IOException),或与包装器异常中的嵌套原因相匹配(例如,包装在 IllegalStateException 中的 IOException)。它可以在任意原因级别匹配。
对于匹配的异常类型,最好将目标异常声明为方法参数,如前面的示例所示。如果匹配多个异常方法,通常优先匹配根异常而不是原因异常。更具体地说,ExceptionDepthComparator 会根据异常深度对异常进行排序,从而从抛出异常的类型开始排序。
或者,注释声明可以缩小要匹配的异常类型,如下例所示:
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/annotation.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/annotation.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
@ExceptionResolver
还可以返回 String
,后者可用作控制台输出。您可以使用 @ExitCode
注释来定义返回代码。
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/annotation.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
@ExceptionResolver
与 void
返回类型一起自动被处理为已处理的异常。然后,您还可以定义 @ExitCode
,并在需要向控制台写入内容时使用 Terminal
。
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/annotation.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]