前后端交互的时候,数据的 ID 字段采用的雪花 ID,Long 类型,返回给前端时,由于数值过大,会导致精度丢失,后面几位会变成 0,这时候就需要把 ID 字段转成 String 类型的返回给前端页面。
目前有三种方式可以实现这个功能:
方式一、@JSONField
采用 @JSONField 注解,在 ID 字段上加上如下的注解,即可返回前端字符串的 ID 数据
@JSONField(serializeUsing = ToStringSerializer.class)
缺点:很明显,每个返回实体 model,只要有 ID,就需要添加注解,太过于繁琐
方式二、Long.class 转成 String.class
在全局配置中,将 Long 类型的字段转成 String 类型
@Configuration
public class CustomFastJsonConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
//1.需要定义一个convert转换消息的对象
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//2.添加fastJson的配置信息
FastJsonConfig fastJsonConfig = new FastJsonConfig();
//3.设置Long为字符串
SerializeConfig serializeConfig = SerializeConfig.globalInstance;
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
fastJsonConfig.setSerializeConfig(serializeConfig);
//4.在convert中添加配置信息.
converter.setFastJsonConfig(fastJsonConfig);
return converter;
}
}
缺点:也很明显,后端返回的数据,只要是 Long 类型的字段,都会被转成 String 返回,导致扩大了转换范围
方式三、SerializeFilter
利用 FastJson 内置的 SerializeFilter,有很多,如下
- PropertyPreFilter 根据 PropertyName 判断是否序列化;
- PropertyFilter 根据 PropertyName 和 PropertyValue 来判断是否序列化;
- NameFilter 修改 Key,如果需要修改 Key,process 返回值则可;
- ValueFilter 修改 Value;
- BeforeFilter 序列化时在最前添加内容;
- AfterFilter 序列化时在最后添加内容。
这里主要用到的 SerializeFilter 为 ValueFilter,如下:
@Configuration
public class CustomFastJsonConfig {
@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter() {
//1.需要定义一个convert转换消息的对象
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
//2.添加fastJson的配置信息
FastJsonConfig fastJsonConfig = new FastJsonConfig();
//3.设置id字段为字符串
fastJsonConfig.setSerializeFilters((ValueFilter) (object, name, value) -> {
if ("id".equalsIgnoreCase(name)){
return value + "";
}
return value;
});
//4.在convert中添加配置信息.
converter.setFastJsonConfig(fastJsonConfig);
return converter;
}
}
很明显,这个处理方式是最好的,这里是将 ID 字段转成 String,需要转换其他字段时,只需要新增相应的逻辑判断即可
完美解决。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于