LocalDateTime Json序列化格式问题

Blade 已结 1 50

一、该问题的重现步骤是什么?

bladex-tool 4.0  jdk17 开始

JsonUtil.toJson(LocalDateTime.now());   输出格式:"2025-03-20T17:18:03.9973433"

 


而之前的 版本 输出:2025-03-20 17:18:03


public JacksonObjectMapper() {

super();

//设置地点为中国

super.setLocale(CHINA);

//去掉默认的时间戳格式

super.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);

//设置为中国上海时区

super.setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));

//序列化时,日期的统一格式

super.setDateFormat(new SimpleDateFormat(DateUtil.PATTERN_DATETIME, Locale.CHINA));

//允许JSON字符串包含非引号控制字符(值小于32的ASCII字符,包含制表符和换行符)

super.configure(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS.mappedFeature(), true);

super.configure(JsonReadFeature.ALLOW_BACKSLASH_ESCAPING_ANY_CHARACTER.mappedFeature(), true);

super.findAndRegisterModules();

//失败处理

super.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);

super.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

//单引号处理

super.configure(JsonReadFeature.ALLOW_SINGLE_QUOTES.mappedFeature(), true);

//反序列化时,属性不存在的兼容处理s

super.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

//日期格式化

super.registerModule(BladeJavaTimeModule.INSTANCE);

//允许空字符串序列化为null对象

super.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

//注册模块

super.findAndRegisterModules();

}


这里有两个

super.findAndRegisterModules();


jdk1.8版本需要两行才生效,而jdk17版本需要去掉第一行。


二、你期待的结果是什么?实际看到的又是什么?

修正LocalDateTime 的序列化格式 

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

BladeX 4.0及以上版本,均存在这个问题。

四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。



1条回答
  •  admin
    admin (最佳回答者)
    1天前

    已处理

    0 讨论(1)
代码语言
提交回复