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 以在默认值之前或之后使用,这通常很有用。