springboot将LocalDateTime转为时间戳

springboot将LocalDateTime转为时间戳

springboot在启动的时候会自动给我们注入一个objectMapper。

但是这个objectMapper并没有对LocalDateTime类进行特殊的序列化处理,当我想将其转为时间戳的时候,只能自己实现一个序列化类,并将需要转换的实体类字段上添加注解@JsonSerialize(using = LocalDateTimeSerialize.class)

public class LocalDateTimeSerialize extends JsonSerializer<LocalDateTime> {
    @Override
    public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        long timestamp = getTimestamp(value);
        gen.writeString(String.valueOf(timestamp));
    }
    
    private long getTimestamp(LocalDateTime localDateTime) {
        return localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();
    }
}

但缺点也很显而易见:这样每个字段上面都添加注解麻烦又难以维护

所以还是需要看看能不能直接改objectMapper配置的地方,查阅了网上的资料发现大多是自己重新注入一个自定义的objectMapper

@Configuration
public class JacksonConfig{
    @Bean
    public ...  // 可以自己搜索
}

如果不需要springboot默认配置的objectMapper,那自然没问题,也推荐这么做。

但如果想直接在默认配置上直接修改:

  1. 修改application.yml文件
  2. 实现Jackson2ObjectMapperBuilderCustomizer接口进行修改

对于LocalDateTime自定义序列化的方法第一点我没找到什么配置可以直接修改,选择第二种方法

@Configuration
public class JacksonConfig implements Jackson2ObjectMapperBuilderCustomizer {
    @Override
    public void customize(Jackson2ObjectMapperBuilder jacksonObjectMapperBuilder) {
        jacksonObjectMapperBuilder.serializerByType(LocalDateTime.class, new LocalDateTimeSerialize());
    }
}

jackson研究的不深,还需多多努力

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值