Exception Resolving
未处理的异常将冒泡到 shell 的 ResultHandlerService
中,然后最终由 ResultHandler
的某个实例处理。可以将 ExceptionResolver
实现的链用于解决异常,并为您提供灵活性,以便返回消息以与 CommandHandlingResult
中包含的退出代码一起写入控制台。CommandHandlingResult
可能包含 message 和/或 exit code。
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/resolving.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
可以将 CommandExceptionResolver
实现全局定义为 bean。
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/resolving.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
或者每个 CommandRegistration
定义(如果仅适用于特定命令本身)。
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/resolving.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
使用命令定义的解析器在全局解析器之前处理。 |
使用您自己的异常类型,它也可以是 boot 的 ExitCodeGenerator
的实例,如果您想要在那里定义退出代码。
Unresolved include directive in modules/ROOT/pages/commands/exceptionhandling/resolving.adoc - include::../../test/java/org/springframework/shell/docs/ErrorHandlingSnippets.java[]
某些内置 CommandExceptionResolver
bean 已注册为处理从命令解析中引发的常见异常。这些使用 order 注册,优先级在 CommandExceptionResolver.DEFAULT_PRECEDENCE
中定义。由于这些 bean 以给定的顺序使用,因此 @Order
注解或 Ordered
可以与任何其他 Spring 应用程序一样使用。如果您需要控制自己的 bean 以在默认值之前或之后使用,这通常很有用。