首页 > 其他分享 >后端Long类型传到前端精度丢失问题

后端Long类型传到前端精度丢失问题

时间:2024-02-12 14:44:06浏览次数:29  
标签:Java FORMAT DEFAULT 后端 Long 丢失 new 序列化 class

自定义对象映射器并扩展MVC框架的消息转换器,解决了后端Long类型传到前端精度丢失问题

利用Jcson实现对象的序列化和反序列化规则

/**
 * 对象映射器:基于jackson将Java对象转为json,或者将json转为Java对象
 * 将JSON解析为Java对象的过程称为 [从JSON反序列化Java对象]
 * 从Java对象生成JSON的过程称为 [序列化Java对象到JSON]
 */
public class JacksonObjectMapper extends ObjectMapper {

    public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd";
    public static final String DEFAULT_DATE_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";
    public static final String DEFAULT_TIME_FORMAT = "HH:mm:ss";

    public JacksonObjectMapper() {
        super();
        //收到未知属性时不报异常
        this.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);

        //反序列化时,属性不存在的兼容处理
        this.getDeserializationConfig().withoutFeatures(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);


        SimpleModule simpleModule = new SimpleModule()
                //反序列化
                .addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)))
                //序列化
                .addSerializer(BigInteger.class, ToStringSerializer.instance)

                .addSerializer(Long.class, ToStringSerializer.instance)

                .addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_TIME_FORMAT)))
                .addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern(DEFAULT_DATE_FORMAT)))
                .addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern(DEFAULT_TIME_FORMAT)));

        //注册功能模块 例如,可以添加自定义序列化器和反序列化器
        this.registerModule(simpleModule);
    }
}

在MvcConfig中增加新的自定义消息转化器,并将优先级设置为最高

    /**
     * 扩展MVC框架的消息转换器
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {

        //创建消息转换器
        //作用:将Controller方法的返回结果对象转换成Json通过输出流响应给前端
        final MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();

        //设置对象转换器底层使用Jackson将Java转换成Json
        messageConverter.setObjectMapper(new JacksonObjectMapper());

        //将上面的消息转换器对象追加到MVC框架的消息转换器集合中,优先使用自己设置的转换器
        converters.add(0,messageConverter);

        super.extendMessageConverters(converters);
    }

标签:Java,FORMAT,DEFAULT,后端,Long,丢失,new,序列化,class
From: https://www.cnblogs.com/poteitoutou/p/18013909

相关文章

  • CF1715E Long Way Home题解
    题解注意到\(k\)是一个很小的数,我们考虑分层图是否可做,这时航线有\(n^2\)条,我们可能会建出\((k+1)m+kn^2\)条边,空间会炸掉,然而单单从分层图的角度来优化,是困难的。对于\(m=0\)的情况。考虑\(\text{dp}\),定义\(dp_{i,j}\)表示乘坐不超过\(i\)次航班到达\(j\)的最......
  • The 18th Heilongjiang Provincial Collegiate Programming Contest
    A.MagicComputer看题目猜规律#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingvi=vector<int>;usingi32=int32_t;constintmod=998244353;intpower(intx,inty){intans=1;while(y){if(y&......
  • POJ--3764 The xor-longest Path(Trie)
    记录13:562024-2-10找到俩个点,获得最大的边权异或值。利用异或的性质,一个值被异或俩次相当于没有异或即axorbxorb=a所以先从顶点出发,获得每个点路径上的异或值,然后对这俩个值进行异或就获得了他们之间路径的异或值。获取从顶点到每个点路径上的异或值后,可以利用trie来......
  • 在k8S中,Service分发后端的策略是什么?
    在Kubernetes(k8s)中,Service可以使用多种策略来分发流量到后端Pod。以下是一些主要的分发策略:ClusterIP(默认策略):Service会获取一个仅集群内部可访问的虚拟IP(ClusterIP),kube-proxy组件根据Service定义的SessionAffinity(如启用)和负载均衡策略将请求转发到后端Pod池。R......
  • python3.9+django4.1+vue3 ,后端项目运行时,报错了,WSGI application 'XXX.wsgi.applicat
    python3.9+django4.1+vue3,后端项目运行时,报错了; 报错信息,如下:django.core.exceptions.ImproperlyConfigured:WSGIapplication'StudentMgrBE.wsgi.application'couldnotbeloaded;Errorimportingmodule.     ------------------------------百度......
  • 新年新岁,好运 long long
     /春龙昂首 福运当头瑞龙摆尾大有可为/  /今宵龙行大运而后万象更新/......
  • Java后端项目实现无限级树 - 案例:部门树 - Department实体类
    privateList<Department>getDeptTree(){   //1.一次性查询出所有数据,放到内存中,可以使用map - 做缓存用   //2.从所有数据中找出第一层级/顶级部门:这就是我们需要返回的数据   //3.遍历所有部门只要不是第一层级的,找自己的上级,并将自己放入上级的childre......
  • x64dbg 防止丢失数据库的插件 DbGit
    我跟了一晚上,说丢就丢了,真的无语~找到个使用git的方式备份数据库的插件DbGit 试了下,使用很简单!在手动保存或退出x64dbg时会自动执行 git add -A git commit -m命令。数据库似乎必须得在软件目录下的db目录才行,在被调试程序目录,似乎不行! 从此不会丢数据了,也算......
  • 前后端跨域竟然不需要加注解!
    众所周知前后端跨域一直是让人头疼的问题。那什么是跨域呢?出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策......
  • SD卡数据恢复:快速恢复丢失的照片和视频
    如果你的SD卡丢失了重要照片或是视频等数据,正在寻找恢复方法,那你非常之幸运,用几分钟读完本文就能掌握SD卡数据恢复要领了。本篇文章会介绍总结一些SD数据丢失原因并列出详细的SD卡数据恢复步骤。随着数据恢复技术的不断进步和完善,SD卡数据恢复已不再是难题。SD卡在全球范围内得到了......