ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

LocalDateTime与时间戳转换的全局配置

2026/9/11 7:26:16 拓冰建站 浏览量
LocalDateTime与时间戳转换的全局配置

问题

在开发中,我们使用LocalDateTime为时间类型作为返回给前端,或者接收给前端的值,经常遇到返回变成了这种形式。

{"timestamp": [2024,1,12,16,36,29,592604100]
}

所以我们需要规定一种统一格式来进行接收与返回,我采用的时间戳的形式

{"timestamp": 1705048744521
}

解决方案

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void extendMessageConverters(List<HttpMessageConverter<?>> converters) {JavaTimeModule javaTimeModule = new JavaTimeModule();javaTimeModule.addSerializer(LocalDateTime.class, new JsonLocalDateTimeSupport.LocalDateTimeSerializer());javaTimeModule.addDeserializer(LocalDateTime.class, new JsonLocalDateTimeSupport.LocalDateTimeDeserializer());ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json().modules(javaTimeModule).build();MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(objectMapper);converters.add(0, converter);}
}

在上述代码中添加了LocalDateTimed的时间戳序列化以及反序列化,用于返回给前端时间戳,或是接收前端传来的时间戳,所以我们需要实现这两个序列化方法

public interface JsonLocalDateTimeSupport {// 序列化实现class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {@Overridepublic void serialize(LocalDateTime localDateTime, JsonGenerator gen, SerializerProvider serializers)throws IOException {if (localDateTime != null) {long timestamp = localDateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();gen.writeNumber(timestamp);}}}// 反序列化实现class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {@Overridepublic LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext)throws IOException {long timestamp = p.getValueAsLong();if (timestamp > 0) {return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());} else {return null;}}}
}

配置完上述代码后即可实现LocalDateTime与时间戳转换的全局配置