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