一、该问题的重现步骤是什么?
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及以上版本,均存在这个问题。
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
扫一扫访问 Blade技术社区 移动端