Создание статического конечного объекта Json в Java

#java #json #vert.x

Вопрос:

В настоящее время я создаю приложение Java Vertx, которое периодически выполняет задачу.

Это приложение выполняет определенную логику и должно возвращать значение в формате Json.

Логика, кажется, работает, и у меня нет проблем с получением желаемого значения в журнале, но у меня проблемы с возвратом этого значения.

 public void getNum(RoutingContext context){  Timer time = new Timer(); ScheduledTask st = new ScheduledTask(); time.schedule(st, 0, 500); JsonObject jo = st.getJo(); if(!jo.toString().equals("{}")){  log.info("print json"   jo);  context.response().putHeader("content-type", "application/json").setStatusCode(200).end(jo.encodePrettily()); }  

И код для запланированной задачи выглядит примерно так.

 public class ScheduledTask extends TimerTask {  JsonObject jo = new JsonObject();  public void run() {    try {  //logic   jo.put("file", split[0]);  jo.put("recogTime", split[1]);  jo.put("number", split[2]);  log.info(jo.encodePrettily());  }catch (Exception e){  e.printStackTrace();  log.info("Error.Running.1stCMD");  }  }   }  

Если я удалю оператор if в своем методе GetNum, он, похоже, вернет пустой json, поэтому я предполагаю, что он возвращает инициализированное значение jo.

Будет ли у меня способ вернуть желаемое значение?

Заранее благодарю вас!!

Ответ №1:

Первым делом:

time.расписание(st, 0, 500); -gt; Это будет только расписание, но будет выполняться где-то в будущем.

JSONObject jo = st.getJo(); -gt; Сразу после возврата с предыдущего вызова вы выполняете get(). Функция расписания не работала бы до тех пор.

Второй:

Если вы используете Vert.x, не используйте таймер java. Вы можете использовать функции, предоставляемые Vertx

setPeriodic() -gt; Для запуска снова и снова с запланированным интервалом. SetTimer() -gt; Выполняется один раз с запланированным интервалом.

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

1. Спасибо за ваши отзывы!! Если я использую setPeriodic(), поскольку он запланирован на будущее, не вернет ли он также нулевое значение, когда я получу Json?

2. В этом прелесть асинхронного программирования, ничто не возвращается, всякий раз, когда происходит событие, вы применяете логику для этого события. Например: Когда вызывается ваша функция внутри setPeriodic (), в этом случае вы создаете свой json и реагируете на контекст маршрутизации. Надеюсь, это будет полезно.

Ответ №2:

установите некоторые значения в JSONObject и попробуйте приведенный ниже код, я не знаю, что такое функция encodePrettily ()!

 routingContext.response() .putHeader("content-type", "application/json; charset=utf-8") .end(Json.encodePrettily(jo.encodePrettily());  

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

1. Я установил значения для объекта Json, но поскольку моя java-программа выполняет задание по расписанию каждые 0,5 секунды, кажется, что она инициализирует объект Json и возвращает нулевой объект Json. Как я уже упоминал выше, я действительно получаю желаемое значение в журнале. encodePrettily () — это просто функция, которая помогает преобразовать объект json в строковый формат