Spring Shell 3中StringInputContext未弹出输入提示问题求助
解决Spring Shell 3.0.3输入组件无提示的问题
核心问题:手动实例化输入组件导致初始化不完整
你手动new StringInput的方式绕过了Spring容器的管理,输入组件没有被正确初始化终端交互所需的全部依赖(比如输入流绑定、渲染配置等),这就是终端未弹出输入提示的原因。
正确实现方式
通过依赖注入获取Input<String>组件,由Spring Shell容器负责完整初始化:
@ShellComponent public class SomeCommand extends AbstractShellComponent { private final Input<String> stringInput; // 构造注入String类型的Input组件 public SomeCommand(Input<String> stringInput) { this.stringInput = stringInput; } @ShellMethod(value = "Ask and return2") public String ask2() { // 使用通用InputContext替代内部类的StringInputContext InputContext<String> context = stringInput.run(InputContext.empty()); return context.getResultValue(); } }
额外排查点
- 确认项目依赖中已正确引入
spring-boot-starter-shell,无版本冲突或缺失依赖 - 若需要自定义提示文本、默认值,可通过
InputOptions配置:InputOptions options = InputOptions.builder() .prompt("What to return?") .defaultValue("") .build(); InputContext<String> context = stringInput.run(InputContext.empty().withOptions(options));
内容的提问来源于stack exchange,提问作者Peter Frankeins
相关产品推荐
相关产品推荐

