命名

如果需要修改选项的长名称,可以使用 OptionNameModifier 接口,它是一个简单的 Function<String, String>。在这个接口中,原始选项名称作为输入,修改后的名称作为输出。

可以在 CommandRegistration 中为每个 OptionSpec 定义修饰符,默认为全局 bean 或通过配置属性定义。在 OptionSpec 中手动定义的修饰符优先于全局定义的修饰符。默认情况下没有定义全局修饰符。

您可以在 CommandRegistration 中使用选项定义一个。

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

添加一个类型为 OptionNameModifier 的单例 bean,它将成为全局默认值。

@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]