fastjson问题汇总
博客专区 > 菜蚜 的博客 > 博客详情
fastjson问题汇总
菜蚜 发表于2年前
fastjson问题汇总
  • 发表于 2年前
  • 阅读 31
  • 收藏 0
  • 点赞 0
  • 评论 0

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;
            }
        };

 

共有 人打赏支持
粉丝 14
博文 49
码字总数 24320
×
菜蚜
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: