コマンドが見つかりません
デフォルトでは、欠落しているコマンドは CommandNotFoundResultHandler
経由で処理され、簡単なメッセージが出力されます。
shell:>missing
No command found for 'missing'
内部的に CommandNotFoundResultHandler
は、ProviderContext
を取得してテキストメッセージを返す単純な関数である CommandNotFoundMessageProvider
を使用しています。以下はカスタムメッセージプロバイダーがどのようなものであるかの例です。
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";
}