跳到主要内容

命名

ChatGPT-4o-mini 中英对照 Naming

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

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

您可以在 CommandRegistration 中通过选项定义一个。

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

添加一个 singleton bean 作为类型 OptionNameModifier,这将成为全局默认值。

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

也可以仅仅添加配置属性 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
yaml

例如在一个带注释的方法中定义的选项,如下所示。

@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
) {}
java

默认情况下,help 命令显示的名称直接来自 @ShellOption

OPTIONS
--from_snake String
[Mandatory]

--fromCamel String
[Mandatory]

--from-kebab String
[Mandatory]

--FromPascal String
[Mandatory]
bash

定义 spring.shell.option.naming.case-type=kebab,并且默认修饰符被添加,选项名称看起来像。

OPTIONS
--from-snake String
[Mandatory]

--from-camel String
[Mandatory]

--from-kebab String
[Mandatory]

--from-pascal String
[Mandatory]
bash