Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

java.sql.Date 在toJSONString时,希望可以通过参数控制是否受SerializerFeature.WriteDateUseDateFormat格式控制 #4518

Open
dengxiaolong1205 opened this issue Jul 16, 2024 · 2 comments · May be fixed by #4519

Comments

@dengxiaolong1205
Copy link

FastJson 1.2.68版本在toJSONStringWithDateFormat时,会将java.sql.date默认处理成数据库存储格式yyyy-MM-dd,但是升级到1.2.83后,java.sql.date会受传参SerializerFeature.WriteDateUseDateFormat的格式进行格式化,经查看是有人提了issue #3473,使java.sql.date的格式化会跟随SerializerFeature.WriteDateUseDateFormat的格式进行格式化,但是当查询数据中的时间类型既有日期也有日期时间的时候,希望在格式化的时候,java.sql.date不受SerializerFeature.WriteDateUseDateFormat的格式控制,默认格式化为数据库存储格式yyyy-MM-dd,java.sql.datetime受SerializerFeature.WriteDateUseDateFormat的格式控制,格式化为yyyy-MM-dd HH:mm:ss,当前是无法实现的,期望可以增加一个参数,控制java.sql.date是否受SerializerFeature.WriteDateUseDateFormat的格式控制

@kimmking
Copy link
Contributor

这个需求不应该放到框架,可以在应用侧实现。
写两个方法:
一个带WriteDateUseDateFormat方法,一个不带。
然后定一个系统变量,调用json序列化的时候,控制用这两个方法中的哪个。

@dengxiaolong1205
Copy link
Author

dengxiaolong1205 commented Jul 30, 2024

这个需求不应该放到框架,可以在应用侧实现。
写两个方法:
一个带WriteDateUseDateFormat方法,一个不带。
然后定一个系统变量,调用json序列化的时候,控制用这两个方法中的哪个。

但是我们应用场景中会出现同时返回java.sql.date和java.sql.datetime两种形式,这种情况下就没办法调两个方法来实现。1.2.68版本对java.sql.date是默认格式化为数据库存储格式的,后来有人对此处理提出issue,将此处理进行了变更,如果没传WriteDateUseDateFormat,默认格式化为数据库存储格式,如果传了WriteDateUseDateFormat,按传过来的时间格式进行格式化,但我认为,既然1.2.68版本对java.sql.date的处理是默认处理为数据库存储格式,那么就表示有人有和我类似的场景需求,不然不会在1.2.68版本加这个处理逻辑,同时toJSONStringWithDateFormat的SerializerFeature传参本身支持多个,是可以在增加一个枚举来单独控制java.sql.date是否仅格式化为数据库存储的格式的,通过扩展一个枚举让这个序列化更灵活,以解决java.sql.date和java.sql.datetime两种类型共存,但是希望转成json字符串中,分别格式化为yyyy-MM-dd和yyyy-MM-dd HH:mm:ss类型的需求,同时不传这个参数的话,就会按WriteDateUseDateFormat的逻辑处理,即解决了之前提issuse同学的问题,也解决了我这边的需求

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
2 participants