Java - Fastjson 序列化/反序列化之『科学计数法』解决方案

问题描述

这次是在 Kafka 消费者 @Payload 发现消息被反序列化的时候,浮点数类型,准确来说这里指的是 Double 类型,比如:123456792(1.23456792E8)

原因分析

经过排查发现,想直接解决 Kafka @Payload 根本问题还是比较难,如果有大佬发现可以评论哈~

所以只能在后面做数据加工处理,但也没那么简单,因为直接对 Double 可用的解决科学计数法没找到,只有 BIgDecimal 的。

解决方案

java 复制代码
/**
 * 处理 JSON 特性
 * - 科学计数法
 * @param object
 * @return
 */
public static Object evalJson(Object object) {
	String jsonString = JSON.toJSONString(object);
	JSONObject jsonObject = JSON.parseObject(jsonString);

    # 为什么要多做一次上面的序列化、反序列化呢? 因为先把 Double 类型转化为 BigDecimal 为下面可以利用 BigDecimal 特性做准备
	jsonString = JSON.toJSONString(jsonObject, SerializerFeature.WriteBigDecimalAsPlain);

	return JSON.parseObject(jsonString);
}

Ps:网上很多都是在啥实体类上加注解,那个当然可以理解,问题是 JSON 有时候面向更多的是临时动态对象,哪来的固定字段加呀~ 所以那些方法我就不重复轮子了,主要提供下针对全局解决这个问题的思路

相关推荐
随机昵称_1234569 分钟前
springboot导出带水印文字的xlsx
java·spring boot·后端
Lyyaoo.21 分钟前
What is Maven?
java·spring boot·maven
23.28 分钟前
【Java】NIO零拷贝:为何transferTo需要循环调用?
java·面试·nio
I_LPL31 分钟前
day48 代码随想录算法训练营 图论专题1
java·算法·深度优先·图论·广度优先·求职面试
架构师沉默33 分钟前
如果 Spring 没了,Java 会怎么样?
java·后端·架构
叶宇燚42 分钟前
Java整理--数据结构篇
java·开发语言·数据结构
吴声子夜歌1 小时前
小程序——界面API(一)
java·javascript·小程序
予枫的编程笔记1 小时前
【面试专栏|Java并发编程】从Runnable到Callable,Java4种线程创建方式
java·多线程·thread·java面试·runnable·callable·java线程
野犬寒鸦1 小时前
SAP后端实习开发面试:操作系统与网络核心考点及Linux与Redis
java·服务器·网络·后端·面试
ServBay1 小时前
代码减半,10分钟彻底告别 Java 开发旧习
java·后端