随笔 - 333  文章 - 1 评论 - 30 阅读 - 84万
< 2025年3月 >
23 24 25 26 27 28 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 28 29
30 31 1 2 3 4 5

问题描述:
项目需要发送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方法包括的很多参数,可以灵活处理一些转换

posted on   何石-博客  阅读(1867)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
历史上的今天:
2015-09-28 linux系统web项目运行环境搭建
2015-09-28 linux 远端执行shell脚本 批量结束各个远端节点进程
点击右上角即可分享
微信分享提示