Springboot + vue 后端把Long类型的数据传给前端,前端可能会出现精度丢失的情况,以及解决方案
1前端解决方案:
https://juejin.im/post/5c51526fe51d455047338a2a 这位大神的方法 获取到jsonlint.js然后导入本地vue项目
本地使用
import jsonlint from "@/utils/jsonlint.js" // 创建axios实例 const service = axios.create({ 在这里重写方法 transformResponse: [function (data) { // Do whatever you want to transform the data if (typeof data === 'string') { try { data = jsonlint.parse(data); } catch (e) { /* Ignore */ } } return data; }] })
2后端解决方案:
1.0
在JavaBean上之间加上下面的注解 (spring boot默认使用Jackson类库),对象序列化成JSON时,将Long转成String
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
@JsonSerialize(using = ToStringSerializer.class)
2.0
全局处理 Springboot 2.X配置
import com.fasterxml.jackson.annotation.JsonInclude; 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.jackson.JsonComponent; import org.springframework.context.annotation.Bean; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; @JsonComponent public class JsonSerializerManage { @Bean public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper objectMapper = builder.createXmlMapper(false).build(); //忽略value为null 时 key的输出 objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); /** * 序列换成json时,将所有的long变成string * 因为js中得数字类型不能包含所有的java long值 */ SimpleModule module = new SimpleModule(); module.addSerializer(Long.class, ToStringSerializer.instance); module.addSerializer(Long.TYPE, ToStringSerializer.instance); objectMapper.registerModule(module); return objectMapper; } }

浙公网安备 33010602011771号