Spring Shell命令行应用Shell方法返回null问题排查
问题分析与解决方案
你遇到的问题是Spring Shell 2.1.1中参数绑定规则不匹配,导致命令传入的参数无法正确映射到方法参数上。
错误原因
在Spring Shell 2.x版本中:
@ShellOption的value属性用于定义短选项(格式为-x,x为单个字符)- 长选项(格式为
--xxx)默认与方法参数的变量名一致,或者需要通过longNames属性显式指定
你的代码里,@ShellOption(value = {"name"})错误地将短选项设为-name(不符合短选项单字符的规范),而你使用的--name是长选项,Spring Shell无法将其与参数arg1绑定,因此arg1的值为null。
修复方案
有两种可行的解决方式:
方案1:显式指定长选项
修改@ShellOption配置,通过longNames属性指定长选项为name,同时可按需配置短选项:
@ShellComponent public class Cli { @ShellMethod("Say my name") public String hi(@ShellOption(value = {"-n"}, longNames = {"name"}) String arg1){ return "Hi " + arg1 + "!!"; } }
此时运行hi --name Chandler或hi -n Chandler,都能得到正确输出:Hi Chandler!!
方案2:让参数名与长选项名一致
直接将方法参数名改为name,Spring Shell会自动将--name长选项绑定到该参数,无需额外配置:
@ShellComponent public class Cli { @ShellMethod("Say my name") public String hi(@ShellOption String name){ return "Hi " + name + "!!"; } }
运行hi --name Chandler即可得到正确结果。
内容的提问来源于stack exchange,提问作者Amos Machora
相关产品推荐
相关产品推荐

