在 Java 中制作静态最终 Json 对象

Making a static final Json object in Java

我目前正在构建一个 Java 定期执行任务的 Vertx 应用程序。

此应用程序执行特定逻辑,应该return Json 格式的值。

逻辑似乎可行,我在日志中获取所需值没有问题,但我无法return输入该值。

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");
      }
    }

  }

如果我删除 getNum 方法中的 if 语句,它似乎 return 一个空的 json,所以我猜测它是 return jo 的初始化值.

我有办法 return 想要的值吗?

提前致谢!!

给 jsonObject 设置一些值并尝试下面的代码,我不知道什么是 encodePrettily() 函数!

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

第一件事:

time.schedule(st, 0, 500); -> 这只会安排但会在未来某处执行。

JsonObject jo = st.getJo(); -> 从上次通话返回后立即执行 get()。到那时调度函数不会有 运行。

第二个:

如果您正在使用 Vert.x,请不要使用 java 计时器。您可以使用 Vertx 提供的函数

setPeriodic() -> To 运行 以预定的间隔一次又一次。 setTimer() -> 到 运行 按预定时间间隔一次。