广告
返回顶部
首页 > 资讯 > 精选 >Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现
  • 309
分享到

Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现

2023-07-05 17:07:22 309人浏览 八月长安
摘要

这篇“spring rest接口中的LocalDateTime日期类型转时间戳怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我

这篇“spring rest接口中的LocalDateTime日期类型转时间戳怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现”文章吧。

一、概述

java程序中一般将日期类型定义为LocalDateTime,数据库中保存的时间是0时区的时间(UTC时间)。对于接口来说,为了支持全球化多时区,接口中的日期类型通常会返回UTC时间戳,简称Epoch,数据类型为long,前端程序会根据本地时区,将时间戳转换为日期格式的字符串,如YYYY-mm-dd HH:mm:ss。

如果在每个时间型字段在接口返回时都进行转换处理,会比较繁琐。应该在一个统一的地方处理这种转换,业务逻辑处理过程中不感知这种转换。

二、通过Jackson2ObjectMapperBuilderCustomizer进行全局类型转换

spring提供了Jackson2ObjectMapperBuilderCustomizer可以用于自定义JSON与对象之间相互转换的处理。

通过自定义Jackson2ObjectMapperBuilderCustomizer,我们可以在json与对象的相互转换转换阶段完成LocalDateTime和Epoch之间的转换,包括接口的入参和出参。

@Configurationpublic class LocalDateTimeToEpochSerdeConfig {    @Bean    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {        return builder -> builder.serializerByType(LocalDateTime.class, new LocalDateTimeToEpochSerializer())                .deserializerByType(LocalDateTime.class, new LocalDateTimeFromEpochDeserializer());    }        public static class LocalDateTimeToEpochSerializer extends JsonSerializer<LocalDateTime> {        @Override        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)                throws IOException {            if (value != null) {                long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();                gen.writeNumber(timestamp);            }        }    }        public static class LocalDateTimeFromEpochDeserializer extends JsonDeserializer<LocalDateTime> {        @Override        public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {            NumberDeserializers.LongDeserializer longDeserializer = new NumberDeserializers.LongDeserializer(Long.TYPE, 0L);            Long epoch = longDeserializer.deserialize(p, ctxt);            return LocalDateTime.ofInstant(Instant.ofEpochSecond(epoch), ZoneId.systemDefault());        }    }}

以上代码中分别包含了json的序列化和反序列化操作,在序列化操作中,把LocalDateTime转换为Epoch。

       public static class LocalDateTimeToEpochSerializer extends JsonSerializer<LocalDateTime> {        @Override        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)                throws IOException {            if (value != null) {                long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();                gen.writeNumber(timestamp);            }        }    }

在反序列化操作中,把Epoch转换为LocalDateTime。

        public static class LocalDateTimeFromEpochDeserializer extends JsonDeserializer<LocalDateTime> {        @Override        public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {            NumberDeserializers.LongDeserializer longDeserializer = new NumberDeserializers.LongDeserializer(Long.TYPE, 0L);            Long epoch = longDeserializer.deserialize(p, ctxt);            return LocalDateTime.ofInstant(Instant.ofEpochSecond(epoch), ZoneId.systemDefault());        }    }

通过以上配置,我们可以在实体类中使用LocalDateTime类型。客户端请求接口时,对于返回结果,自动转换为Epoch数据,对于请求参数,自动从Epoch转换为LocalDateTime。

以上就是关于“Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现

本文链接: https://www.lsjlt.com/news/353798.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现
    这篇“Spring rest接口中的LocalDateTime日期类型转时间戳怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我...
    99+
    2023-07-05
  • php怎么实现日期和时间戳的转换
    PHP是一种流行而强大的编程语言,拥有广泛的应用。其中,日期与时间戳(timestamp)的转换也是开发者们经常需要处理的问题。本文将介绍如何将PHP中的日期转换成时间戳,以及如何将时间戳转换成日期。将日期转换成时间戳在PHP中,我们可以通...
    99+
    2023-05-14
    php时间戳 php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作