解决FastJson 1.2.39的bug

本文解决了FastJSON中日期转换格式被默认格式覆盖的问题,并调整了JSON序列化时Bean字段的排序逻辑,确保了字段顺序的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、日期转换默认格式覆盖注解格式的bug;


com.alibaba.fastjson.serializer.JSONSerializer#writeWithFormat

修改后的代码:

public final void writeWithFormat(Object object, String format) {
    if (object instanceof Date) {
        DateFormat dateFormat = this.getDateFormat();
        if(format!=null){
            dateFormat = new SimpleDateFormat(format, locale);
            dateFormat.setTimeZone(timeZone);
        }
        String text = dateFormat.format((Date) object);
        out.writeString(text);
        return;
    }
    write(object);
}


2、解决转JSON时候Bean字段默认被排序的毛病:

com.alibaba.fastjson.serializer.SerializeWriter#computeFeatures

修改的代码:

    protected void computeFeatures() {
        quoteFieldNames = (this.features & SerializerFeature.QuoteFieldNames.mask) != 0;
        useSingleQuotes = (this.features & SerializerFeature.UseSingleQuotes.mask) != 0;
//        sortField = (this.features & SerializerFeature.SortField.mask) != 0;
        sortField = false;
        disableCircularReferenceDetect = (this.features & SerializerFeature.DisableCircularReferenceDetect.mask) != 0;
        beanToArray = (this.features & SerializerFeature.BeanToArray.mask) != 0;
        writeNonStringValueAsString = (this.features & SerializerFeature.WriteNonStringValueAsString.mask) != 0;
        notWriteDefaultValue = (this.features & SerializerFeature.NotWriteDefaultValue.mask) != 0;
        writeEnumUsingName = (this.features & SerializerFeature.WriteEnumUsingName.mask) != 0;
        writeEnumUsingToString = (this.features & SerializerFeature.WriteEnumUsingToString.mask) != 0;

        writeDirect = quoteFieldNames //
                      && (this.features & nonDirectFeautres) == 0 //
                      && (beanToArray || writeEnumUsingName)
                      ;

        keySeperator = useSingleQuotes ? '\'' : '"';
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值