首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Java日期时间字段JSON序列化为时间戳,原来这么简单?

Java日期时间字段JSON序列化为时间戳,原来这么简单?

作者头像
大风写全栈
发布2024-10-30 19:16:09
发布2024-10-30 19:16:09
7670
举报
文章被收录于专栏:锤子代码锤子代码

三步走。

第一步:定义序列化和反序列化工具类

序列化类:

代码语言:javascript
复制
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneId;

public class TimestampLocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {

    public static final TimestampLocalDateTimeSerializer INSTANCE = new TimestampLocalDateTimeSerializer();

    @Override
    public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeNumber(value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
    }

}

反序列化类:

代码语言:javascript
复制
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;

import java.io.IOException;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;


public class TimestampLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {

    public static final TimestampLocalDateTimeDeserializer INSTANCE = new TimestampLocalDateTimeDeserializer();

    @Override
    public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        return LocalDateTime.ofInstant(Instant.ofEpochMilli(p.getValueAsLong()), ZoneId.systemDefault());
    }

}

第二步:注册反序列化规则

代码语言:javascript
复制
SimpleModule simpleModule = new SimpleModule();
        simpleModule
                // 新增 LocalDateTime 序列化、反序列化规则,使用 Long 时间戳
                .addSerializer(LocalDateTime.class, TimestampLocalDateTimeSerializer.INSTANCE)
                .addDeserializer(LocalDateTime.class, TimestampLocalDateTimeDeserializer.INSTANCE);
// 注册模块.
objectMapper.registerModule(module);

第三步:在实体类上应用

代码语言:javascript
复制
  /** 支付时间 */
  @JsonProperty("pay_time")
  @JsonDeserialize(using = TimestampLocalDateTimeDeserializer.class)
  @JsonSerialize(using = TimestampLocalDateTimeSerializer.class)
  private LocalDateTime payTime;

接下来,知道怎么做了吧?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锤子代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档