使用jackson的registerModule功能,注册不同日期类型的反序列化器,支持各种场景的日期格式匹配,并封装类型fastjson式的调用方式。
主入口类JSON:
package xxx.util;
import java.lang.reflect.Type;
import java.util.List;
import java.util.TimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import xxx.XxxRuntimeException;
import xxx.DateDeserializer;
import xxx.SqlDateDeserializer;
import xxx.TimestampDeserializer;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.type.TypeFactory;
/**
* JSON工具类(使用jackson封装)
*
* @author 许畅
* @since JDK1.8
* @version 2020年6月8日 许畅 新建
*/
public class JSON {
/**
* 日志
*/
private final static Logger LOGGER = LoggerFactory.getLogger(JSON.class);
/**
* 转换器
*/
private static ObjectMapper MAPPER;
static {
MAPPER = new ObjectMapper();
// 允许没有引号的字段名
MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
// 允许单引号字段名
MAPPER.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);
// 自动给字段名加上引号
MAPPER.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, true);
// 时间默认以时间戳格式写
// MAPPER.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, true);
MAPPER.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 设置时间转换所使用的默认时区
MAPPER.setTimeZone(TimeZone.getDefault());
// null不生成到json字符串中
MAPPER.setSerializationInclusion(Include.NON_NULL);
// 全局日期反序列化配置
SimpleModule module = new SimpleModule();
module.addDeserializer(java.util.Date.class, new DateDeserializer());
module.addDeserializer(java.sql.Date.class, new SqlDateDeserializer());
module.addDeserializer(java.sql.Timestamp.class, new TimestampDeserializer());
MAPPER.registerModule(module);
}
/**
* 构造方法
*/
private JSON() {
}
/**
* 将JSON字符串内容转换为集合类型
*
* @param <T> 泛型对象
* @param content JSON字符串内容
* @param clazz List泛型中对象类型
* @return List集合
*/
public static <T> List<T> parseArray(String content, Clas