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

0

В настоящее время я создаю приложение 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.

Могу ли я вернуть желаемое значение?

Заранее спасибо!!

3

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

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

JsonObject jo = st.getJo (); -> Сразу после возврата из предыдущего вызова вы выполняете get (). До этого времени функция расписания не работала бы.

Второй:

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

setPeriodic () -> Запускать снова и снова с заданным интервалом. setTimer () -> Для однократного запуска через запланированный интервал.

2
  • Спасибо за ваш отзыв!! Если я использую setPeriodic (), поскольку он планирует на будущее, не будет ли он также возвращать нулевое значение, когда я получаю Json?
    Adam
    2 дня назад
  • В этом прелесть асинхронного программирования: ничего не возвращается, всякий раз, когда происходит событие, вы применяете логику для этого события. Например: когда вызывается ваша функция внутри setPeriodic (), вы создаете свой json и отвечаете на свой контекст маршрутизации. Надеюсь, это будет полезно.
    Digsb
    2 дня назад
0

установите некоторые значения в 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 в строковом формате
    Adam
    2 дня назад