Добавьте пользовательский ввод при запросе URL API

#java #spring #api

Вопрос:

Это проект, над которым я работаю, чтобы в основном получить информацию об определенных акциях. Исходный рабочий код является:

 public static CommandLineRunner run(RestTemplate restTemplate) throws Exception {  return args -gt; {  Data data = restTemplate.getForObject(  "https://finnhub.io/api/v1/stock/insider-transactions?symbol=CRMamp;token=c683tuqad3iagio36uj0", Data.class);  log.info(data.toString());  System.out.println(data);    ResponseEntitylt;Listlt;Stringgt;gt; peersResponse =  restTemplate.exchange("https://finnhub.io/api/v1/stock/peers?symbol=CRMamp;token=c683tuqad3iagio36uj0",  HttpMethod.GET, null, new ParameterizedTypeReferencelt;Listlt;Stringgt;gt;() {  });  Listlt;Stringgt; peers = peersResponse.getBody();  System.out.println(peers);  }; }  

И то, что я пытаюсь сделать, — это добавить пользовательский «ввод», чтобы добавить его между URL-адресом, чтобы получить информацию о запасе.

Здесь есть несколько проблем:

  1. Я знаю, что CommandLineRunner запускается сразу же, как только вы запускаете приложение. Каков хороший способ заставить мое приложение ждать «ввода» от пользователя?
  2. И, во-вторых, использовать этот «ввод» в URL API для запроса данных?

Я не уверен, правильно ли я объясняю себя, и я надеюсь, что, показав свой исходный код и код, которого я хочу достичь, будет легче понять любым экспертам. Спасибо за любую помощь!

Что я хочу сделать:

 public static CommandLineRunner run(RestTemplate restTemplate) throws Exception {  return args -gt; {  @SuppressWarnings("resource")  Scanner input = new Scanner(System.in);  Data data = restTemplate.getForObject(  "https://finnhub.io/api/v1/stock/insider-transactions?symbol="   input   "amp;token=c683tuqad3iagio36uj0", Data.class);  log.info(data.toString());  System.out.println(data);    ResponseEntitylt;Listlt;Stringgt;gt; peersResponse =  restTemplate.exchange("https://finnhub.io/api/v1/stock/peers?symbol="   input   "amp;token=c683tuqad3iagio36uj0",  HttpMethod.GET, null, new ParameterizedTypeReferencelt;Listlt;Stringgt;gt;() {  });  Listlt;Stringgt; peers = peersResponse.getBody();  System.out.println(peers);  };  }  

Я просто изменил свой код, чтобы правильно принимать «ввод» в URL API, а также показывать больше моих кодов:

 public class StocksQueryApplication {   private static final Logger log = LoggerFactory.getLogger(StocksQueryApplication.class);  private static Scanner input = new Scanner(System.in);   public static void main(String[] args) {  SpringApplication.run(StocksQueryApplication.class, args);  }   @Bean  public RestTemplate restTemplate(RestTemplateBuilder builder) {  return builder.build();  }    @Bean  public static CommandLineRunner run(RestTemplate restTemplate) throws Exception {  return args -gt; {  Data data = restTemplate.getForObject(  "https://finnhub.io/api/v1/stock/insider-transactions?symbol="   input   "amp;token=c683tuqad3iagio36uj0", Data.class);  log.info(data.toString());  System.out.println(data);    ResponseEntitylt;Listlt;Stringgt;gt; peersResponse =  restTemplate.exchange("https://finnhub.io/api/v1/stock/peers?symbol="   input   "amp;token=c683tuqad3iagio36uj0",  HttpMethod.GET, null, new ParameterizedTypeReferencelt;Listlt;Stringgt;gt;() {  });  Listlt;Stringgt; peers = peersResponse.getBody();  System.out.println(peers);  };  } }  

Осталось только заставить CommandLineRunner дождаться «ввода» пользователя, а затем запустить. Но я, кажется, не могу понять, как это сделать.

Комментарии:

1. Как насчет использования аргумента командной строки для ввода пользователем?

2. @tgdavies Спасибо за ответ! Я все еще немного сбит с толку, не могли бы вы поподробнее?

3. Моя интуиция подсказывает, что я не должен использовать CommandLineRunner, так как он запускается сразу же при запуске приложения, но я не знаю другого способа выхода из данных, которые я получаю от вызова API.

4. Вы можете использовать Scanner CommandLineRunner вход для чтения.

5. Итак, вы хотите сказать, что мой второй блок кодов верен? Итак, что остается, так это заставить CommandLineRunner ждать ввода пользователя, чтобы он знал, что такое «ввод»