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

相关推荐
你爱写程序吗(新H)3 小时前
基于微信小程序高校课堂教学管理系统 课堂管理系统微信小程序(源码+文档)
java·spring boot·微信小程序·小程序
组合缺一5 小时前
Solon Cloud Gateway 开发:熟悉 Cloud Gateway
java·gateway·solon
呀2435 小时前
基于SpringBoot多数据源解决方案
java·spring boot·后端
酷爱码5 小时前
springboot 动态线程池
java·spring boot·后端
xiao--xin6 小时前
LeetCode100之全排列(46)--Java
java·算法·leetcode·回溯
S-X-S7 小时前
装饰SpringMVC的适配器实现响应自动包装
java·springmvc·适配器·web响应
皮皮虾我们跑8 小时前
Java中的泛型
java·开发语言
fly spider8 小时前
每日 Java 面试题分享【第 14 天】
java·开发语言
Ray.19989 小时前
深入理解 Spring 的 Lazy Loading:原理、实现与应用场景
java·开发语言·后端·spring
你爱写程序吗(新H)9 小时前
基于微信小程序酒店管理系统 酒店管理微信小程序(源码+文档)
java·spring boot·微信小程序·小程序