ネーミング

オプションの長い名前を変更する必要がある場合は、単純な Function<String, String> である OptionNameModifier インターフェースを使用して実行できます。このインターフェースでは、元のオプション名が入り、変更された名前が出てきます。

修飾子は CommandRegistration の OptionSpec ごとに定義でき、Bean としてグローバルにデフォルト設定するか、構成プロパティを介して定義できます。OptionSpec で手動で定義された修飾子は、グローバルに定義された修飾子よりも優先されます。デフォルトでは、グローバル修飾子は定義されていません。

CommandRegistration のオプションで定義できます。

CommandRegistration.builder()
	.withOption()
		.longNames("arg1")
		.nameModifier(name -> "x" + name)
		.and()
	.build();

シングルトン Bean を型 OptionNameModifier として追加すると、それがグローバルなデフォルトになります。

@Bean
OptionNameModifier sampleOptionNameModifier() {
	return name -> "x" + name;
}

定義された型に基づいて自動構成する spring.shell.option.naming.case-type を使用して構成プロパティを追加することもできます。

noop は何もしません。camelsnakekebabpascal はそれぞれ camelCasesnake_casekebab-case または PascalCase の組み込み修飾子をアクティブにします。

CommandRegistration Bean を直接作成する場合、構成プロパティによるグローバルデフォルトは、事前構成された Builder インスタンスを使用する場合にのみ機能します。さらに見る [ シェルコマンドのプログラムモデルの使用 ]
spring:
  shell:
     option:
       naming:
         case-type: noop
         # case-type: camel
         # case-type: snake
         # case-type: kebab
         # case-type: pascal

たとえば、このようなアノテーション付きメソッドで定義されたオプション。

@ShellMethod(key = "option-naming-sample")
public void optionNamingSample(
	@ShellOption("from_snake") String snake,
	@ShellOption("fromCamel") String camel,
	@ShellOption("from-kebab") String kebab,
	@ShellOption("FromPascal") String pascal
) {}

そのコマンドのデフォルトの help では、@ShellOption から直接取得された名前が表示されます。

OPTIONS
       --from_snake String
       [Mandatory]

       --fromCamel String
       [Mandatory]

       --from-kebab String
       [Mandatory]

       --FromPascal String
       [Mandatory]

spring.shell.option.naming.case-type=kebab を定義すると、デフォルトの修飾子が追加され、オプション名は次のようになります。

OPTIONS
       --from-snake String
       [Mandatory]

       --from-camel String
       [Mandatory]

       --from-kebab String
       [Mandatory]

       --from-pascal String
       [Mandatory]