@ShellComponent类可以具有处理组件异常的方法 方法。这些是针对带注释的方法的。@ExceptionResolverSpring中文文档

异常可能与正在传播的顶级异常(例如直接 IOException)匹配 被抛出)或针对包装器异常中的嵌套原因(例如,包装的 IOException 在 IllegalStateException 中)。这可以在任意原因级别匹配。Spring中文文档

对于匹配异常类型,最好将目标异常声明为方法参数,如 前面的示例显示。当多个异常方法匹配时,根异常匹配为 通常首选原因异常匹配。更具体地说,ExceptionDepthComparator 用于根据异常的深度对异常进行排序,这些异常与引发的异常类型不同。Spring中文文档

或者,注释声明可以缩小异常类型以匹配,如 以下示例显示:Spring中文文档

@ExceptionResolver({ RuntimeException.class })
CommandHandlingResult errorHandler(Exception e) {
	// Exception would be type of RuntimeException,
	// optionally do something with it
	return CommandHandlingResult.of("Hi, handled exception\n", 42);
}
@ExceptionResolver
CommandHandlingResult errorHandler(RuntimeException e) {
	return CommandHandlingResult.of("Hi, handled custom exception\n", 42);
}

@ExceptionResolver还可以返回用作控制台的输出。您可以 使用注解定义返回代码。String@ExitCodeSpring中文文档

@ExceptionResolver
@ExitCode(code = 5)
String errorHandler(Exception e) {
	return "Hi, handled exception";
}

@ExceptionResolver返回类型自动处理为处理异常。 然后,如果需要编写内容,还可以定义和使用 进入控制台。void@ExitCodeTerminalSpring中文文档

@ExceptionResolver
@ExitCode(code = 5)
void errorHandler(Exception e, Terminal terminal) {
	PrintWriter writer = terminal.writer();
	String msg =  "Hi, handled exception " + e.toString();
	writer.println(msg);
	writer.flush();
}

方法参数

@ExceptionResolver方法支持以下参数:Spring中文文档

方法参数 描述

异常类型Spring中文文档

用于访问引发的异常。这是任何类型的 或 .ExceptionThrowableSpring中文文档

终端Spring中文文档

为了访问底层终端,即获取其终端编写器。JLineSpring中文文档

方法参数 描述

异常类型Spring中文文档

用于访问引发的异常。这是任何类型的 或 .ExceptionThrowableSpring中文文档

终端Spring中文文档

为了访问底层终端,即获取其终端编写器。JLineSpring中文文档

返回值

@ExceptionResolver方法支持以下返回值:Spring中文文档

返回值 描述

字符串Spring中文文档

返回到 shell 的纯文本。在这种情况下,使用退出代码 1。Spring中文文档

命令HandlingResultSpring中文文档

普通有消息和退出代码。CommandHandlingResultSpring中文文档

无效Spring中文文档

具有 void 返回类型的方法被视为已完全处理异常。通常 您可以定义为方法参数,并使用终端编写器从中编写响应。由于异常已完全处理,因此在这种情况下使用退出代码 0。TerminalSpring中文文档

返回值 描述

字符串Spring中文文档

返回到 shell 的纯文本。在这种情况下,使用退出代码 1。Spring中文文档

命令HandlingResultSpring中文文档

普通有消息和退出代码。CommandHandlingResultSpring中文文档

无效Spring中文文档

具有 void 返回类型的方法被视为已完全处理异常。通常 您可以定义为方法参数,并使用终端编写器从中编写响应。由于异常已完全处理,因此在这种情况下使用退出代码 0。TerminalSpring中文文档