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

问题

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

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

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

{
   
	"timestamp": 1705048744521
}

解决方案

@Configuration
public class WebConfig implements WebMvcConfigurer {
   
    @Override
    public 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> {
   
        @Override
        public 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> {
   
        @Override
        public 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与时间戳转换的全局配置

相关推荐

  1. LocalDateTime时间转换全局配置

    2024-01-13 10:28:03       37 阅读
  2. Oracle中时间转换使用

    2024-01-13 10:28:03       12 阅读
  3. python时间时间字符串转化

    2024-01-13 10:28:03       9 阅读
  4. 时间时间转换及android和ios对时间识别区别

    2024-01-13 10:28:03       36 阅读
  5. 时间,标准时间之间转化

    2024-01-13 10:28:03       41 阅读
  6. C/C++ 字符串时间互相转换

    2024-01-13 10:28:03       8 阅读
  7. js时间转换为日期

    2024-01-13 10:28:03       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-13 10:28:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-13 10:28:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-13 10:28:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-13 10:28:03       18 阅读

热门阅读

  1. golang学习-结构体

    2024-01-13 10:28:03       28 阅读
  2. No Feign Client for loadBalancing defined. 错误解决

    2024-01-13 10:28:03       37 阅读
  3. MYSQL学习——聚合函数

    2024-01-13 10:28:03       28 阅读
  4. 30天精通Nodejs--第十五天:Websocket

    2024-01-13 10:28:03       34 阅读
  5. 深度学习基础教程

    2024-01-13 10:28:03       28 阅读
  6. 「HDLBits题解」Module add

    2024-01-13 10:28:03       29 阅读
  7. 在Python中调用狄拉克gamma矩阵

    2024-01-13 10:28:03       29 阅读
  8. leaflet聚类——leaflet.markercluster

    2024-01-13 10:28:03       28 阅读
  9. 单链表与循环链表创建

    2024-01-13 10:28:03       37 阅读
  10. 关于人工智能的浅见

    2024-01-13 10:28:03       34 阅读