springboot解决jackson序列化Long类型精度失效问题

简介: springboot解决jackson序列化Long类型精度失效问题
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;
 
/**
 * 配置spring boot内嵌的Jackson序列化与反序列化类型映射
 *
 * -日期配置:
 *      map.put(LocalDateTime.class, localDateTimeSerializer());
 *      Spring Boot 提供了 spring.jackson.date-format配置可以让我们进行日期格式化,
 *      但它只能格式化 java.util.Date。
 *    定义一个配置类,在配置类注入Bean 实现日期全局格式化,同时还兼顾了 Date 和 LocalDateTime 并存。
 *      需要配置
 *      spring:
 *        jackson:
 *          date-format: yyyy-MM-dd HH:mm:ss
 *          time-zone: GMT+8
 *
 *  -Long类型转为字符串:
 *      map.put(Long.class, ToStringSerializer.instance);
 *      解决Long类型数据返回到前端精度丢失问题
 */
@Configuration
public class JacksonSerializerConfig {
    @Value("${spring.jackson.date-format}")
    private String pattern;
 
    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        Map<Class<?>, JsonSerializer<?>> map = new HashMap<>();
        map.put(LocalDateTime.class, localDateTimeSerializer());
        map.put(Long.class, ToStringSerializer.instance);
        return builder -> builder.serializersByType(map);
    }
 
    @Bean
    public LocalDateTimeSerializer localDateTimeSerializer() {
        return new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(pattern));
    }
目录
相关文章
|
1月前
|
JSON 安全 Java
Spring Boot 序列化、反序列化
本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
110 2
|
24天前
|
JavaScript Java
Java long传到前台精度损失解决方案
Java long传到前台精度损失解决方案
17 1
|
30天前
|
安全 Java 编译器
long类型在32位操作系统上的安全问题
long类型在32位操作系统上的安全问题
27 1
|
20天前
|
DataWorks 监控 安全
DataWorks产品使用合集之在从ES中抽取增量数据时,遇到long类型的时间戳,该怎么办
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
30天前
|
存储 机器学习/深度学习 搜索推荐
long long类型介绍
long long类型介绍
|
1月前
|
JSON fastjson Java
Spring Boot Jackson 和Fast JSON 用哪个好啊 ?
【4月更文挑战第22天】
127 1
|
1月前
|
JSON 前端开发 JavaScript
Long类型字段在前后端传值问题
Long类型字段在前后端传值问题
29 0
|
2天前
|
JSON Java API
jackson序列化和反序列化中的注解和扩展点大全【收藏】
jackson序列化和反序列化中的注解和扩展点大全【收藏】
|
3天前
|
存储 JSON 数据库
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
Django REST framework关联序列化器详解:掌握复杂关系的序列化与反序列化艺术
|
5天前
|
Java 数据库 开发者
Java中的序列化与反序列化
Java中的序列化与反序列化