[alibaba/fastjson]序列化时对java.sql.Date和java.util.Date应用不同的DateFormat?

2025-10-31 497 views
1

如题,希望默认序列化java.sql.Date为yyyy-MM-dd,而java.util.Date为yyyy-MM-dd HH:mm:ss。能支持吗?如何设置?如果用FastJsonConfig会两者都影响吧?

回答

7

除了上述两种Date,建议也同时考虑下LocalDate和LocalDateTime如何设置格式。

0

https://github.com/alibaba/fastjson/releases/tag/1.2.57 问题已修复,请用新版本

6

哥,你这个修复,并不是针对所有java.sql.Date的吧? 时间:new java.sql.Date(1493942400000L),经过特殊逻辑处理,toJSONString返回的是yyyy-MM-dd 但是时间:new java.sql.Date(1493942400001L),不符合特殊逻辑要求,返回的就是1493942400001。

给大佬跪了... com.alibaba.fastjson.serializer.DateCodec#write中

        if (clazz == java.sql.Date.class) {
            long millis = ((java.sql.Date) object).getTime();
            TimeZone timeZone = serializer.timeZone;
            int offset = timeZone.getOffset(millis);
            if (millis % offset == 0) {
                // 这里为啥要这么特殊处理啊,吐血啊
                out.writeString(object.toString());
                return;
            }
        }