【Java序列化时间,Long类型全局配置】Java全局序列化LocalDateTime为时间戳配置类
各位好
今天笔者跟大家分享一个实际开发中经常遇到的问题
问题 1 LocalDateTime返回前端包含T处理
问题2 Long类型返回前端失真问题
直接上代码:
@Configuration
public class JacksonConfig {
/**
* Json序列化和反序列化转换器,用于转换Post请求体中的json以及将我们的对象序列化为返回响应的json
*/
@Bean
public ObjectMapper objectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//忽略实体类中不存在的属性
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
//LocalDateTime系列序列化和反序列化模块,继承自jsr310
JavaTimeModule javaTimeModule = new JavaTimeModule();
// 自定义 全局把返回时间转为 时间戳
TemporalAccessorToLongSerializer date2Long = new TemporalAccessorToLongSerializer();
// Date2LongSerializer instance = Date2LongSerializer.instance;
javaTimeModule.addSerializer(LocalDateTime.class, date2Long);
javaTimeModule.addSerializer(LocalDate.class, date2Long);
// 自定义 全局把入参时间转为 时间戳
javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(BaseConst.PATTERN_DATETIME)));
javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(BaseConst.PATTERN_DATE)));
// 自定义 全局返回值Long转换为字符串
SimpleModule simpleModule = new SimpleModule();
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
objectMapper.registerModule(javaTimeModule);
return objectMapper;
}
}
把这个配置加到项目里,会解决最开始的两个问题
问题1 把LocalDateTime处理为时间戳返回前端。
问题2 把Long类型返回值处理为String类型返回。