一种解决前端精度丢失的方式

前端精度丢失:后端传向前端的数据,如果是数值型的数据,超过16位的数字,在前端会多出来的位数直接给0,导致精度丢失。

在SQL中,使用cast()函数,将查询的数值类型的字段数据,直接转换为字符字段。

select cast(id as VARCHAR) as id from 表名

请注意,如果你使用了三层架构,或是SSM,或是MVC,则应该是有对应的实体类,因此如果这样查SQL,出来的数据类型和实体类不同,因此,导致实体类不能正常的接收数据,这里同样也提出一种解决思路。

如过查询的数据不需要经过处理,直接给到前端,可将SQL中查询出来的数据,直接放到一个

List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();

这样可以直接跳过实体类,向前端返回数据。但还是尽力避免使用这种方式,因为这种方式对后续开发中的数据处理很不友好,程序中充斥着各种list。

另外常规的解决前端精度丢失问题,笔者还使用过SpringMvc 的消息转换器,可以对原本的代码的不做任何处理,做到很少的代码侵入。对原来的代码不需要做修改。也是一种很便捷的方式。


/*springmvc 的配置类可以实现 WebMvcConfigurer,也可继承 WebMvcConfigurationSupport,
但请注意,如一个项目中同时有这两个,将会执行继承的support类,实现类将不会执行*/

//@Configuration
//@Slf4j
//public class WebMvcConfig extends WebMvcConfigurationSupport {

   /**
     * @param converters
     * @description:扩展mvc框架的消息转换器
     * @return: void
     * @author: 谢柯
     * @time: 2022/9/29 17:28
     */
    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        log.info("启动消息转换器");
//        创建消息转换器对象
        MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//        设置对象转换器,底层使用jackson将Java对象转换为Json
        messageConverter.setObjectMapper(new JacksonObjectMapper());
//        将创建的消息转换器对象追加到 mvc 框架的转换器集合中,放在第一位
        converters.add(0, messageConverter);

    }

后言

小说里的文字是会刻意忽略细节的,它让人产生一种过于好的幻觉,只有诗人才会歌颂泥土的芬芳,真正和土地打交道的放牛郎只会低下头划拉两下,找出更肥沃的土壤,也许只有谨记这一点,才能与这种文字创造的虚妄对抗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值