You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Vert.x JsonArray中添加java.sql.Date对象?

解决Vert.x JsonArray添加java.sql.Date抛出非法类型异常的问题

这个问题我之前在项目里也踩过坑,Vert.x的io.vertx.core.json.JsonArray(以及对应的JsonObject)对支持的类型做了严格限制,java.sql.Date并不在它默认允许直接添加的类型列表中,所以直接调用add()方法就会抛出你看到的Illegal type in JsonObject: class java.sql.Date异常。

给你几个实用的解决思路:

  • 转换为Vert.x支持的原生类型
    Vert.x默认支持java.util.Date和long类型的时间戳,你可以把java.sql.Date转换成这两种类型之一再添加:

    long millis = System.currentTimeMillis();
    java.sql.Date date = new java.sql.Date(millis);
    // 方式1:转为java.util.Date
    data.add(new java.util.Date(date.getTime()));
    // 方式2:直接使用时间戳(推荐,序列化/反序列化效率最高)
    data.add(millis);
    
  • 转换为ISO标准日期字符串
    如果需要在JSON中存储可读性强的日期格式,可以把java.sql.Date转换成ISO 8601格式的字符串,后续解析也能轻松还原:

    import java.time.format.DateTimeFormatter;
    java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
    // 利用Java 8+的时间API转成ISO日期字符串
    data.add(date.toLocalDate().format(DateTimeFormatter.ISO_DATE));
    

    要是还在使用Java 7及以下,可以用SimpleDateFormat(注意要处理线程安全问题,最好不要全局共享实例):

    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd");
    data.add(sdf.format(date));
    
  • 自定义类型序列化(进阶场景)
    如果你的业务场景需要频繁处理java.sql.Date,可以通过Vert.x的Codec机制自定义序列化逻辑,把java.sql.Date转换成Vert.x能识别的格式。不过这个方案相对复杂,适合有统一类型处理需求的项目,一般小场景用前两种方法就足够了。

内容的提问来源于stack exchange,提问作者Ming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:39:28