问题描述:
项目需要发送JSON数据,BigDecimal转成json仍然显示科学计数法,如果使用BigDecimai的toPlainString()需要将数据格式转为String,所以找了一下fastjson的自定义序列化内容,记录一下,以免以后忘记
解决方案:
方案一:
JSONObject.toJSONString(vo,SerializerFeature.WriteBigDecimalAsPlain)
格式化是添加SerializerFeature.WriteBigDecimalAsPlain 这个是fastjson自带的
方案二:
自定义处理
@JSONField(name="payPrice",serializeUsing = NumberSerializer.class) private BigDecimal payPrice;
@JSONField注解可以定义转化后的JSON字段名字等属性,其中serializeUsing可以做单独处理
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方法包括的很多参数,可以灵活处理一些转换