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 有时候面向更多的是临时动态对象,哪来的固定字段加呀~ 所以那些方法我就不重复轮子了,主要提供下针对全局解决这个问题的思路

相关推荐
num_killer14 小时前
小白的Langchain学习
java·python·学习·langchain
期待のcode14 小时前
Java虚拟机的运行模式
java·开发语言·jvm
程序员老徐14 小时前
Tomcat源码分析三(Tomcat请求源码分析)
java·tomcat
a程序小傲15 小时前
京东Java面试被问:动态规划的状态压缩和优化技巧
java·开发语言·mysql·算法·adb·postgresql·深度优先
仙俊红15 小时前
spring的IoC(控制反转)面试题
java·后端·spring
阿湯哥15 小时前
AgentScope Java 集成 Spring AI Alibaba Workflow 完整指南
java·人工智能·spring
小楼v15 小时前
说说常见的限流算法及如何使用Redisson实现多机限流
java·后端·redisson·限流算法
与遨游于天地15 小时前
NIO的三个组件解决三个问题
java·后端·nio
czlczl2002092515 小时前
Guava Cache 原理与实战
java·后端·spring
yangminlei16 小时前
Spring 事务探秘:核心机制与应用场景解析
java·spring boot