栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot将LocalDateTime转为时间戳

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot将LocalDateTime转为时间戳

springboot将LocalDateTime转为时间戳

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

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

public class LocalDateTimeSerialize extends JsonSerializer {
    @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研究的不深,还需多多努力

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274568.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号