|
@@ -4,7 +4,12 @@ import com.fasterxml.jackson.core.JsonProcessingException;
|
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
|
|
|
|
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
|
|
|
|
|
+
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* @author reghao
|
|
* @author reghao
|
|
@@ -13,12 +18,18 @@ import java.io.IOException;
|
|
|
public class JsonUtils {
|
|
public class JsonUtils {
|
|
|
// 使用单例 ObjectMapper,保证性能和线程安全
|
|
// 使用单例 ObjectMapper,保证性能和线程安全
|
|
|
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
|
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
|
|
|
-
|
|
|
|
|
static {
|
|
static {
|
|
|
// 配置:忽略 JSON 中存在但 Java 对象中不存在的字段(防止报错)
|
|
// 配置:忽略 JSON 中存在但 Java 对象中不存在的字段(防止报错)
|
|
|
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
|
// 配置:允许单引号、注释等非标准格式(可选,增加鲁棒性)
|
|
// 配置:允许单引号、注释等非标准格式(可选,增加鲁棒性)
|
|
|
OBJECT_MAPPER.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
|
|
OBJECT_MAPPER.configure(com.fasterxml.jackson.core.JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
|
|
|
|
|
+
|
|
|
|
|
+ // 1. 注册 Java 8 时间模块
|
|
|
|
|
+ OBJECT_MAPPER.registerModule(new JavaTimeModule());
|
|
|
|
|
+ // 2. 设置全局日期格式(匹配你 JSON 中的 yyyy-MM-dd HH:mm:ss)
|
|
|
|
|
+ OBJECT_MAPPER.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
+ // 3. 容错配置:忽略 JSON 中存在但 Java 实体类中没有的字段
|
|
|
|
|
+ OBJECT_MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -53,4 +64,13 @@ public class JsonUtils {
|
|
|
throw new RuntimeException("JSON 序列化失败: " + obj.getClass().getName(), e);
|
|
throw new RuntimeException("JSON 序列化失败: " + obj.getClass().getName(), e);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public static <T> List<T> toList(String json, Class<T> clazz) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 动态构建 JavaType: List<clazz>
|
|
|
|
|
+ return OBJECT_MAPPER.readValue(json, OBJECT_MAPPER.getTypeFactory().constructCollectionType(List.class, clazz));
|
|
|
|
|
+ } catch (JsonProcessingException e) {
|
|
|
|
|
+ return new ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|