继https://blog.csdn.net/fengdijiang/article/details/100163734之后,
对全局的BigDecimal类做了String Serializer处理,精度的问题解决了,
但是遇到了Get请求应答返回json对象被String化的问题。具体问题没定位到: 记 一 个 why?
============与Jackson一样=====================fastjson支持对单个字段设置序列化类型,但是在实际使用中出现了未知的疑问,具体移步图片示例:
@JSONField(name = "refund_fee_amt") private BigDecimal refundFeeAmt; @JSONField(name = "need_clear_amt", serializeUsing = ToStringSerializer.class)//应结算金额 private BigDecimal needClearAmt; 属性的get、set方法...
简单的对象转json是可行的,但是实际应用当中
List<TMacntFeeResp> list = feeCountResp.getList();
return R.ok().put("rows", JSON.toJSON(list)).put("total", total + "");
同事是通过list包了一层后再通过JSON把变量名从驼峰转下划线输出就不行了,当然通过修改全局序列化配置类对BigDecimal的处理依然还是生效的。
public static Object toJSON(Object javaObject) {
return toJSON(javaObject, SerializeConfig.globalInstance);
}
那么问题是怎么解决的呢?
首先分析:
List<TMchntDAILYailyCountEntity> list = new ArrayList();
list.add(entity);
要让list打印出来的string 我想要的(让注解生效),就必须是JSON.toJSONString(entity)的,所以重写了TMchntDAILYailyCountEntity
@Override
public String toString(){
return JSON.toJSONString(this);
}
接下来就只要通过list产出一个object就可以了。所以就有了下面这句代码:
Object object = JSONObject.parse(list.toString());
从结果上是不是也可以反证:JSON.toJSON(list); 并没有不会让list内的对象序列化!!?
====================浅层的分析解决了问题,更深的没挖=============验证代码如下================
public static void main(String[] args){
TMchntDAILYailyCountEntity entity = new TMchntDAILYailyCountEntity();
entity.setRefundFeeAmt(new BigDecimal("123.89"));
entity.setNeedClearAmt(new BigDecimal("112.99"));
String strEntitiy = JSON.toJSONString(entity);
System.out.println(strEntitiy);
System.out.println(entity.toString());
System.out.println("--------------------");
List<TMchntDAILYailyCountEntity> list = new ArrayList();
list.add(entity);
System.out.println(list);
Object o = JSON.toJSON(list);//使用了全局的序列化功能,并没有使用JSONField内配置的
System.out.println(o);
System.out.println("--------------------");
// SerializeConfig serializeConfig = SerializeConfig.globalInstance;
// serializeConfig.put(BigDecimal.class, ToStringSerializer.instance);
Object object = JSONObject.parse(list.toString());
//Object object = JSON.toJSON(list, serializeConfig );
System.out.println(object);
//System.out.println(o);
return;
}
============结果===============
{"need_clear_amt":"112.99","refund_fee_amt":123.89}
{"need_clear_amt":"112.99","refund_fee_amt":123.89}
--------------------
[{"need_clear_amt":"112.99","refund_fee_amt":123.89}]
[{"need_clear_amt":112.99,"refund_fee_amt":123.89}]
--------------------
[{"need_clear_amt":"112.99","refund_fee_amt":123.89}]
修复前有精度损失:
修复后: