refactor(service): 修改IEntityService泛型为VO类型并优化缓存策略
重构所有注解@CacheConfig的Service类,将IEntityService泛型从实体类改为VO类 实现实体与VO之间的转换逻辑,使用VO替代实体进行缓存以避免序列化问题 更新相关依赖组件和测试用例,确保功能完整性和系统兼容性 优化Redis缓存配置,清理旧缓存数据并验证新缓存策略有效性
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
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标准格式
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user