Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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 join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants