Spring Shell - 在执行 Shell 方法的过程中捕获用户输入
Spring Shell - capturing user input in middle of executing ShellMethod
是一种在执行过程中捕获用户输入的方法 @ShellMethod
。基本上停止执行请求用户输入的方法并在捕获后继续执行。
您应该能够直接与 System.in
交互,尽管这并不是 Spring Shell 的真正意义:命令应该是独立的。
这里有可能的解决方案:, authored by ZachOfAllTrades
它仅在您的应用程序基于 SpringBoot 时有效,因此您可以访问由 SpringBoot 配置的 LineReader
对象。
@Autowired
LineReader reader;
public String ask(String question) {
return this.reader.readLine("\n" + question + " > ");
}
@ShellMethod(key = { "setService", "select" }, value = "Choose a Speech to Text Service")
public void setService() {
boolean success = false;
do {
String question = "Please select a service.";
// Get Input
String input = this.ask(question);
// Input handling
/*
* do something with input variable
*/
success = true;
}
} while (!success);
}
虽然我自己没有尝试过。
使用SpringShellUI组件,现在我们在未来。
“从 2.1.x 开始有一个新的组件模型,它提供了更简单的方法来为常见用例创建更高级别的用户交互,例如以各种形式询问输入。这些通常只是纯文本输入或从列表中选择某项。"
@ShellComponent
public class ComponentCommands extends AbstractShellComponent {
@ShellMethod(key = "component string", value = "String input", group = "Components")
public String stringInput(boolean mask) {
StringInput component = new StringInput(getTerminal(), "Enter value", "myvalue");
component.setResourceLoader(getResourceLoader());
component.setTemplateExecutor(getTemplateExecutor());
if (mask) {
component.setMaskCharater('*');
}
StringInputContext context = component.run(StringInputContext.empty());
return "Got value " + context.getResultValue();
}
}
是一种在执行过程中捕获用户输入的方法 @ShellMethod
。基本上停止执行请求用户输入的方法并在捕获后继续执行。
您应该能够直接与 System.in
交互,尽管这并不是 Spring Shell 的真正意义:命令应该是独立的。
这里有可能的解决方案:, authored by ZachOfAllTrades
它仅在您的应用程序基于 SpringBoot 时有效,因此您可以访问由 SpringBoot 配置的 LineReader
对象。
@Autowired
LineReader reader;
public String ask(String question) {
return this.reader.readLine("\n" + question + " > ");
}
@ShellMethod(key = { "setService", "select" }, value = "Choose a Speech to Text Service")
public void setService() {
boolean success = false;
do {
String question = "Please select a service.";
// Get Input
String input = this.ask(question);
// Input handling
/*
* do something with input variable
*/
success = true;
}
} while (!success);
}
虽然我自己没有尝试过。
使用SpringShellUI组件,现在我们在未来。
“从 2.1.x 开始有一个新的组件模型,它提供了更简单的方法来为常见用例创建更高级别的用户交互,例如以各种形式询问输入。这些通常只是纯文本输入或从列表中选择某项。"
@ShellComponent
public class ComponentCommands extends AbstractShellComponent {
@ShellMethod(key = "component string", value = "String input", group = "Components")
public String stringInput(boolean mask) {
StringInput component = new StringInput(getTerminal(), "Enter value", "myvalue");
component.setResourceLoader(getResourceLoader());
component.setTemplateExecutor(getTemplateExecutor());
if (mask) {
component.setMaskCharater('*');
}
StringInputContext context = component.run(StringInputContext.empty());
return "Got value " + context.getResultValue();
}
}