微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

fastjson问题汇总

1、返回json有部分数据有bug,转换json异常$ref,如:“奶粉” || 已解决 // 解决循环引用,对应的配置见spring-web.xml

解决方式1:

JSONObject.toJSONString(list,SerializerFeature.disableCircularReferenceDetect);

解决方式2:

<bean id="fastJsonHttpMessageConverter"
class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
<property name="features">
<array value-type="com.alibaba.fastjson.serializer.SerializerFeature">
<value>disableCircularReferenceDetect</value>
</array>
</property>
</bean>
<bean id="disableCircularReferenceDetect" class="org.springframework.beans.factory.config.FieldRetrievingfactorybean">
<property name="staticField" value="com.alibaba.fastjson.serializer.SerializerFeature.disableCircularReferenceDetect"></property>
</bean>

2、fastjson对于float、double类型的数字精度丢失的问题

com.alibaba.fastjson.serializer.DoubleSerializer#write 有这么一段:

doubleText = Double.toString(doubleValue);
                if (doubleText.endsWith(".0")) {
                    doubleText = doubleText.substring(0,doubleText.length() - 2);
                }

对于float类型也是一样,com.alibaba.fastjson.serializer.FloatCodec#write

解决方案:

、重写序列化器;

添加ValueFilter:

ValueFilter filter = new ValueFilter() {
            @Override
            public Object process(Object object,String name,Object value) {
                if (value instanceof BigDecimal || value instanceof Double || value instanceof Float) {
                    return new BigDecimal(value.toString());
                }
                return value;
            }
        };

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐