命名

如果需要修改選項長名稱,可以使用 OptionNameModifier 介面,這是一個簡單的 Function<String, String>。在這個介面中,原始選項名稱輸入,修改後的名稱輸出。

修改器可以針對 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-casePascalCase 的內建修改器。

如果直接建立 CommandRegistration bean,則僅在使用預先組態的 Builder 實例時,透過組態屬性的全域預設值才有效。請參閱 [using-shell-commands-programmaticmodel] 以瞭解更多資訊。
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]