如何向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
相关产品推荐
相关产品推荐

