问题描述:
项目需要发送JSON数据,BigDecimal转成json仍然显示科学计数法,如果使用BigDecimai的toPlainString()需要将数据格式转为String,所以找了一下fastjson的自定义序列化内容,记录一下,以免以后忘记
解决方案:
方案一:
1 | JSONObject.toJSONString(vo,SerializerFeature.WriteBigDecimalAsPlain) |
格式化是添加SerializerFeature.WriteBigDecimalAsPlain 这个是fastjson自带的
方案二:
自定义处理
1 2 | @JSONField (name= "payPrice" ,serializeUsing = NumberSerializer. class ) private BigDecimal payPrice; |
@JSONField注解可以定义转化后的JSON字段名字等属性,其中serializeUsing可以做单独处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | import com.alibaba.fastjson.serializer.JSONSerializer; import com.alibaba.fastjson.serializer.ObjectSerializer; import com.alibaba.fastjson.serializer.SerializeWriter; import java.io.IOException; import java.lang.reflect.Type; import java.math.BigDecimal; public class NumberSerializer implements ObjectSerializer { @Override public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException { SerializeWriter out = serializer.out; if (object == null ) { out.writeNull(); return ; } if ( "java.math.BigDecimal" .equalsIgnoreCase(fieldType.getTypeName())) { BigDecimal value = (BigDecimal) object; out.write(value.toPlainString()); } } } |
write方法包括的很多参数,可以灵活处理一些转换
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2015-09-28 linux系统web项目运行环境搭建
2015-09-28 linux 远端执行shell脚本 批量结束各个远端节点进程