当前位置: 首页 > news >正文

购物网站用那个软件做株洲疫情最新情况

购物网站用那个软件做,株洲疫情最新情况,dw是做静态网站还是动态的,开设公司网站文章目录 精度丢失的具体原因解决方法1. 使用 JsonSerialize 和 ToStringSerializer2. 使用 JsonFormat 注解3. 全局配置解决方案 结论 开发商城管理系统的品牌管理界面时,发现一个问题,接口返回品牌Id和页面展示的品牌Id不一致,如接口返回的…

文章目录

    • 精度丢失的具体原因
    • 解决方法
      • 1. 使用 `@JsonSerialize` 和 `ToStringSerializer`
      • 2. 使用 `@JsonFormat` 注解
      • 3. 全局配置解决方案
    • 结论

在这里插入图片描述

开发商城管理系统的品牌管理界面时,发现一个问题,接口返回品牌Id和页面展示的品牌Id不一致,如接口返回的是1816714744603811841,前端战胜的是1816714744603811800

这是因为在前端出现了数据精度丢失。

精度丢失的具体原因

JavaScript的Number类型用于表示浮点数,它遵循IEEE 754标准中的64位浮点数格式。这意味着它能够准确表示从(-2{53})到(2{53}-1)之间的所有整数。超出这个范围的整数值在转换为Number类型时可能会发生精度丢失,即原本不同的长整数会被转换成相同的浮点数值,从而导致数据失真。

解决方法

为了解决品牌ID在前后端传输过程中精度丢失的问题,可以采用以下几种解决方法:

1. 使用 @JsonSerializeToStringSerializer

在Java后端中,可以通过使用Jackson库的注解功能,将Long类型的字段在序列化为JSON时转换为String类型。这样,前端接收到的数据是字符串形式,避免了精度丢失的问题。

示例代码:

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;@Data
public class BrandVo {// 使用ToStringSerializer将Long类型的id字段转换为String类型@JsonSerialize(using = ToStringSerializer.class)private Long id;// 其他字段...
}

通过这种方式,我们可以确保后端返回的JSON中,Long类型的字段都以字符串的形式存在,前端可以直接将其作为字符串处理,无需担心精度问题。

2. 使用 @JsonFormat 注解

除了使用 ToStringSerializer,Jackson还提供了 @JsonFormat 注解,它允许指定字段的序列化格式。当将 shape 属性设置为 JsonFormat.Shape.STRING 时,Long类型的字段会被格式化为字符串。

示例代码:

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;@Data
public class BrandVo {// 使用@JsonFormat注解将Long类型的id字段格式化为String@JsonFormat(shape = JsonFormat.Shape.STRING)private Long id;// 其他字段...
}

这种方法同样可以确保Long类型的字段在序列化为JSON时以字符串形式出现,避免前端精度丢失的问题。

3. 全局配置解决方案

虽然使用注解可以在一定程度上解决问题,但对于大型项目,逐个字段添加注解不仅繁琐,还可能导致代码冗余和难以维护。因此,可以考虑使用全局配置的方式,一次性解决所有Long类型字段的序列化问题。

示例代码:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;@Configuration
public class JacksonConfig {@Bean@Primary@ConditionalOnMissingBean(ObjectMapper.class)public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {ObjectMapper objectMapper = builder.createXmlMapper(false).build();SimpleModule simpleModule = new SimpleModule();// 将Long类型序列化为String类型simpleModule.addSerializer(Long.class, ToStringSerializer.instance);objectMapper.registerModule(simpleModule);return objectMapper;}
}

在这个配置中,我们创建了一个自定义的ObjectMapper Bean,并注册了一个SimpleModule,该模块使用ToStringSerializer将Long类型序列化为String类型。这样,整个应用中所有Long类型的字段在序列化时都会自动转换为String类型。

结论

前端精度丢失问题是一个常见的挑战,但通过上述三种方法,我们可以有效地解决这个问题。在实际开发中,我们可以根据项目的具体情况和需求选择合适的方法。对于需要精确表示大数字的场景,将Long类型转换为String类型是一个简单而有效的解决方案。

http://www.mmbaike.com/news/27025.html

相关文章:

  • 成都门户网站建设公司企业网站优化报告
  • 上海网站快速排名做一个公司网页多少钱
  • h5网站开发石家庄高级seo经理
  • 网站服务器参数查询凤山网站seo
  • 网页设计小白做网站长沙seo排名外包
  • 网站备案会过期吗seo排名如何优化
  • 福州网站建设自助建站站长工具免费
  • h5网站建设公司网站建设需要多少钱?
  • 电子商务网站开发的内容刷关键词优化排名
  • 苹果id钓鱼网站制作济宁百度推广电话
  • 网站推广论坛互联网营销师培训机构
  • 网站建设的大公司好互联网营销的方法
  • 怎样用dw做网站主页百度商城
  • 遵义网站制作广告优化师培训
  • 网站制作收费超级外链在线发布
  • 微信辅助做任务网站建立企业网站步骤
  • 专业做网站多少钱常州百度推广公司
  • 泉州专业建站公司室内设计网站
  • 网站开发工程师就业前景教育培训学校
  • 成立公司需要具备什么条件seo投放营销
  • 网站开发费属于研发支出吗太原seo网站管理
  • 容桂网站智能推广新闻免费制作自己的网站
  • 做网站的数据库的选择网站免费制作平台
  • 湖南省建设厅网站首页网络平台宣传方式有哪些
  • 盐城做网站的哪个公司好2023第二波疫情已经到来
  • 哈尔滨手机建站模板创量广告投放平台
  • 公司网站建设的定位语要怎么取网站seo推广优化教程
  • 新建的网站多长时间在百度搜到官网首页入口百度
  • 自己怎么做外贸批发网站百度seo免费推广教程
  • 西宁网站建设兼职关键词快速排名平台