最新の安定バージョンについては、Spring Shell 4.0.2 を使用してください!

コマンドが見つかりません

デフォルトでは、不足しているコマンドは CommandNotFoundResultHandler を介して処理され、単純なメッセージが出力されます。

shell:>missing
No command found for 'missing'

内部的には、CommandNotFoundResultHandler は CommandNotFoundMessageProvider を使用しています。これは ProviderContext を受け取ってテキストメッセージを返す単純な関数です。以下は、カスタムメッセージプロバイダーの例です。

class CustomProvider implements CommandNotFoundMessageProvider {

	@Override
	public String apply(ProviderContext context) {
		// parsed commands without options
		List<String> commands = context.commands();
		// actual error, usually CommandNotFound exception
		Throwable error = context.error();
		// access to registrations at this time
		Map<String, CommandRegistration> registrations = context.registrations();
		// raw text input from a user
		String text = context.text();
		return "My custom message";
	}
}

この実装を Bean として定義することで変更できます。

@Bean
CommandNotFoundMessageProvider provider1() {
	return new CustomProvider();
}

CommandNotFoundResultHandler は関数型インターフェースなので、ラムダとしてライターとして使用できます。

@Bean
CommandNotFoundMessageProvider provider2() {
	return ctx -> "My custom message";
}