異常解析

未處理的異常會冒泡到 shell 的 ResultHandlerService,最終由某個 ResultHandler 例項處理。ExceptionResolver 實現鏈可用於解決異常,併為您提供了靈活性,可以將訊息與退出程式碼一起返回到控制檯,這些都封裝在 CommandHandlingResult 中。CommandHandlingResult 可能包含一個“訊息”和/或“退出程式碼”。

static class CustomExceptionResolver implements CommandExceptionResolver {

	@Override
	public CommandHandlingResult resolve(Exception e) {
		if (e instanceof CustomException) {
			return CommandHandlingResult.of("Hi, handled exception\n", 42);
		}
		return null;
	}
}

CommandExceptionResolver 實現可以作為 Bean 全域性定義

@Bean
CustomExceptionResolver customExceptionResolver() {
	return new CustomExceptionResolver();
}

或如果僅適用於特定命令,則可以按 CommandRegistration 定義

CommandRegistration.builder()
	.withErrorHandling()
		.resolver(new CustomExceptionResolver())
		.and()
	.build();
使用命令定義的解析器在全域性解析器之前處理。

您可以使用自己的異常型別,如果需要在此處定義退出程式碼,它們也可以是 Spring Boot 的 ExitCodeGenerator 例項

static class CustomException extends RuntimeException implements ExitCodeGenerator {

	@Override
	public int getExitCode() {
		return 0;
	}
}

一些內建的 CommandExceptionResolver Bean 被註冊以處理從命令解析中丟擲的常見異常。這些 Bean 以 CommandExceptionResolver.DEFAULT_PRECEDENCE 中定義的“順序”優先順序註冊。由於這些 Bean 按給定順序使用,因此 @Order 註解或 Ordered 介面可以像在任何其他 Spring 應用程式中一樣使用。如果您需要控制自己的 Bean 在預設 Bean 之前或之後使用,這通常很有用。

© . This site is unofficial and not affiliated with VMware.