附带时间 格式化配置
@Slf4j
public class JacksonTool {
private final static ObjectMapper mapper;
private final static ObjectMapper notNullMapper;
static {
mapper = new ObjectMapper();
initConfig(mapper);
}
static {
notNullMapper = new ObjectMapper();
initConfig(notNullMapper);
notNullMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
/**
* 初始化 jackson 配置
* @param mapper
*/
static void initConfig(ObjectMapper mapper){
// 忽略json中在对象不存在对应属性
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// 忽略空bean转json错误
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
// 关闭日期转时间戳
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
JavaTimeModule javaTimeModule = new JavaTimeModule();
//格式化时间格式
javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
//反序列化
javaTimeModule.addDeserializer(LocalDateTime.class,new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
javaTimeModule.addDeserializer(LocalDate.class,new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
javaTimeModule.addDeserializer(LocalTime.class,new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss")));
javaTimeModule.addDeserializer(Date.class, new DateDeserializers.DateDeserializer() {
@SneakyThrows
@Override
public Date deserialize(JsonParser jsonParser, DeserializationContext dc) {
String text = jsonParser.getText().trim();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sdf.parse(text);
}
});
mapper.registerModule(javaTimeModule);
}
/**
* json转对象
*
* @param jsonStr json串
* @param classType 对象类型
* @return 对象
*/
public static <T> T toEntity(String jsonStr, Class<T> classType) {
if (StringUtils.isEmpty(jsonStr)) {
log.warn("Json string {} is empty!", classType);
return null;
}
try {
return mapper.readValue(jsonStr, classType);
} catch (IOException e) {
log.error("json to entity error.", e);
}
return null;
}
/**
* json转化为带泛型的对象
* new TypeReference<List<UserVo>>(){}
* @param jsonStr json字符串
* @param typeReference 转化类型
* @return 对象
*/
public static <T> T toEntity(String jsonStr, TypeReference<T> typeReference) {
if (StringUtils.isBlank(jsonStr) || typeReference == null) {
return null;
}
try {
return (T) mapper.readValue(jsonStr, typeReference);
} catch (Exception e) {
log.error("json to entity error.", e);
}
return null;
}
/**
* 对象转json
*
* @param obj 对象
* @return json串
*/
public static String toJson(Object obj) {
if (obj instanceof String) {
return (String) obj;
}
try {
return mapper.writeValueAsString(obj);
} catch (Exception e) {
log.error("obj to json error.", e);
}
return null;
}
/**
* null 不参与序列化
* @param obj
* @return
*/
public static String toJsonNotNull(Object obj) {
if (obj instanceof String) {
return (String) obj;
}
try {
return notNullMapper.writeValueAsString(obj);
} catch (Exception e) {
log.error("obj to json error.", e);
}
return null;
}
/**
* 对象转json(格式化的json)
*
* @param obj 对象
* @return 格式化的json串
*/
public static String toJsonWithFormat(Object obj) {
if (obj == null) {
return null;
}
if (obj instanceof String) {
return (String) obj;
}
try {
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (IOException e) {
log.error("obj to json error.", e);
}
return null;
}
}
网友评论