fastjson 1.2.20版本空值序列化问题

pqwbnv8z  于 2021-11-27  发布在  Java
关注(0)|答案(5)|浏览(363)

今天更新了 1.2.20 版本发现,发现空值的序列化与之前版本不一致,之前默认不序列化空值,新版本序列化了空值,不得以又退回了之前的版本,请问,新版本就这个问题怎么与以前保持一致。

rjzwgtxy

rjzwgtxy1#

你是怎样用的?不应该哈

gz5pxeao

gz5pxeao2#

这是我的配置,Spring版本4.2.8,Controller使用了@responsebody注解,直接使用JSON.toJSONString(obj)方法测试了下输出的结果也是一样。使用1.2.15到1.2.19版本都试了下,只有1.2.20不对。

<bean id="fastJsonConfig" class="com.alibaba.fastjson.support.config.FastJsonConfig">
        <property name="charset" value="UTF-8"/>
        <property name="dateFormat" value="yyyy-MM-dd HH:mm:ss"/>
        <property name="features">
            <list value-type="com.alibaba.fastjson.parser.Feature">
                <value>OrderedField</value>
            </list>
        </property>
        <property name="serializerFeatures">
            <list value-type="com.alibaba.fastjson.serializer.SerializerFeature">
                <value>WriteNullStringAsEmpty</value>
                <value>WriteNullListAsEmpty</value>
                <value>SkipTransientField</value>
                <value>WriteNonStringKeyAsString</value>
                <value>WriteDateUseDateFormat</value>
                <value>WriteNullBooleanAsFalse</value>
            </list>
        </property>
    </bean>

    <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4">
        <property name="supportedMediaTypes">
            <list>
                <value>application/json;charset=UTF-8</value>
            </list>
        </property>
        <property name="fastJsonConfig" ref="fastJsonConfig"/>
    </bean>
rwqw0loc

rwqw0loc3#

测试了一下,是这样的

public class Model {
    private String a;
    private int b;
        getter&setter;
}
public static void main(String[] args) {
            Model a = new Model();
            a.setB(1);
            System.out.println( JSON.toJSONString(a,SerializerFeature.WriteNullStringAsEmpty,
                    SerializerFeature.WriteNullListAsEmpty,SerializerFeature.SkipTransientField,
                    SerializerFeature.WriteNonStringKeyAsString,SerializerFeature.WriteDateUseDateFormat,
                    SerializerFeature.WriteNullBooleanAsFalse
                    ));//output {"b":1} @ 1.2.19
                    // output {"a":"","b":1} @ 1.2.20
        }
8gsdolmq

8gsdolmq4#

既然带了 SerializerFeature.WriteNullStringAsEmpty 这个feature,现在的输出才更符合你的意图哈

gcmastyq

gcmastyq5#

SerializerFeature.WriteNullStringAsEmpty 这个feature 字面意思应该是只对String类型做处理吧,但为什么现在对所有类型都做了处理,如果是非String类型的value为null,则会将null序列化成“null”,这个感觉不是很合理呀。

相关问题