Open lvxianchao opened 1 year ago
后端处理的思路是配置 Jackson,在序列化时将 Long 类型和 long 类型序列化成 String 类型:
Long
long
String
package BusinessHelper.config; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.math.BigInteger; /** * Author: hcryeo * Date: 2023-05-11 13:44 * Description: */ @Slf4j @Configuration public class JacksonConfig { /** * 注册 Jackson 全局 Long 类型转为 String 类型,解决前端 Long 类型精度丢失的问题 * * @return Jackson2ObjectMapperBuilderCustomizer */ @Bean public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() { return jacksonObjectMapperBuilder -> { jacksonObjectMapperBuilder.serializerByType(BigInteger.class, ToStringSerializer.instance); jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance); }; } }
以上代码只处理了 Long 类型,并没有处理 long 类型,如果想要处理 long 类型,再加一行:
jacksonObjectMapperBuilder.serializerByType(Long.TYPE, ToStringSerializer.instance);
前端处理的思路是,利用 Axios 的 transformResponse 在 JSON 数据尚未传递给 then/catch 之前,对内容进行拦截处理,使用 json-bigint 库进行解析 JSON:
transformResponse
then/catch
json-bigint
import JSONbig from "json-bigint"; axios({ transformResponse: [ data => JSONbig.parse(data), ], })
处理前后端通讯 Long 类型精度丢失的问题
后端处理
后端处理的思路是配置 Jackson,在序列化时将
Long
类型和long
类型序列化成String
类型:以上代码只处理了
Long
类型,并没有处理long
类型,如果想要处理long
类型,再加一行:前端处理
前端处理的思路是,利用 Axios 的
transformResponse
在 JSON 数据尚未传递给then/catch
之前,对内容进行拦截处理,使用json-bigint
库进行解析 JSON: