重构模型类包结构,将模型类按功能模块划分到不同的子包中。优化序列化处理,为VO类添加serialVersionUID并实现Serializable接口。移除部分冗余的serialVersionUID字段,简化模型类代码。同时修复UITools中空值处理的问题,并更新pom版本至0.0.100-SNAPSHOT。 - 将模型类按功能模块划分到ds子包中 - 为VO类添加序列化支持 - 移除冗余的serialVersionUID字段 - 修复UITools空值处理问题 - 更新项目版本号
64 lines
2.4 KiB
Java
64 lines
2.4 KiB
Java
package com.ecep.contract.config;
|
||
|
||
import java.io.IOException;
|
||
import java.time.Instant;
|
||
import java.time.LocalDateTime;
|
||
import java.time.ZoneId;
|
||
import java.time.format.DateTimeFormatter;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
import com.fasterxml.jackson.core.JsonParseException;
|
||
import com.fasterxml.jackson.core.JsonParser;
|
||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||
import com.fasterxml.jackson.databind.DeserializationContext;
|
||
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
|
||
|
||
/**
|
||
* 自定义LocalDateTime反序列化器,支持多种格式
|
||
*/
|
||
class CustomLocalDateTimeDeserializer extends StdDeserializer<LocalDateTime> {
|
||
private final List<DateTimeFormatter> formatters;
|
||
|
||
public CustomLocalDateTimeDeserializer() {
|
||
super(LocalDateTime.class);
|
||
// 支持多种日期时间格式
|
||
this.formatters = new ArrayList<>();
|
||
// ISO标准格式,2011-12-03T10:15:30
|
||
this.formatters.add(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
||
// 项目默认格式 yyyy-MM-dd HH:mm:ss
|
||
this.formatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
||
// 其他可能的格式
|
||
this.formatters.add(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
|
||
this.formatters.add(DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
|
||
this.formatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm"));
|
||
this.formatters.add(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
|
||
}
|
||
|
||
@Override
|
||
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt)
|
||
throws IOException, JsonProcessingException {
|
||
String value = p.getText().trim();
|
||
if (value == null || value.isEmpty()) {
|
||
return null;
|
||
}
|
||
|
||
// 尝试使用各种格式解析
|
||
for (DateTimeFormatter formatter : formatters) {
|
||
try {
|
||
return LocalDateTime.parse(value, formatter);
|
||
} catch (Exception e) {
|
||
// 尝试下一种格式
|
||
continue;
|
||
}
|
||
}
|
||
|
||
// 如果所有格式都失败,尝试使用ISO_INSTANT格式(可能是时间戳字符串)
|
||
try {
|
||
return LocalDateTime.ofInstant(Instant.parse(value), ZoneId.systemDefault());
|
||
} catch (Exception e) {
|
||
// 仍然失败,抛出异常
|
||
throw new JsonParseException(p, "无法解析为LocalDateTime: " + value);
|
||
}
|
||
}
|
||
} |