首页 > 解决方案 > 如何使用 Quarkus 反应式客户端插入时间?

问题描述

我是 Quarkus 的新手,我正在尝试在表中插入一条记录,但表中包含时间字段,并且在插入记录时 Pgpool 不允许,为此我正在使用@JsonSerialize。

public class Table1{

  private int id;                                                             
  @JsonSerialize(using=JsonTimeSerializer.class)
  private Date scheduleTime;   

     public Uni<Long> addRecords(PgPool client) {
        String sql = "Insert into table1 (runtime) values ($1)";

        Tuple t = Tuple.of(scheduleTime);

        return client.preparedQuery(sql).execute(t).onItem()
            .transform(pgRowSet -> pgRowSet.iterator().next().getLong("id"));
    }
}

public class JsonTimeSerializer extends JsonSerializer<Date>{
  private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

  @Override
  public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
        throws IOException, JsonProcessingException {
    
    String formattedDate = dateFormat.format(date);
    
    gen.writeString(formattedDate);
    
  }

}

现在,在执行此操作时,我遇到了以下异常:

ESTEASY002020:未处理的异步异常,发回 500:io.vertx.core.impl.NoStackTraceThrowable:位置 [0] 的参数,类 = [java.util.Date] 和值 = [Thu Jan 01 12:26:26 IST 1970 ] 无法强制为预期的 class = [java.time.LocalTime] 进行编码。

谁能让我知道为什么会这样?我在做什么错?

我可以使用以下方式实现此目的,但我希望使用一些注释自动转换它。

对象[] 数组 = {scheduleTime.toInstant().atZone(ZoneId.systemDefault()).toLocalTime()};

标签: javavert.xquarkus

解决方案


推荐阅读