Open warrior701 opened 5 years ago
什么版本?
1.2.55
package t;
import java.util.Date;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class Test3 {
private List list;
private Date date;
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public static void main(String[] args) {
// System.setProperty("java.vm.name", "dalvik");
String string = JSON.toJSONString(new Test3(), SerializerFeature.WriteNullListAsEmpty);
System.out.println(string);
}
}
当使用 "dalvik"跳过asm时,就不会出现 @wenshao
以下是在ASMSerializerFactory使用ASM生成JavaBeanSerializer子类的代码中,对判断值为空的字段处理函数_if_write_null
当一个null字段不是String\Number\Collection\Boolean 时,它的序列化过滤mask是
SerializerFeature.WRITE_MAP_NULL_FEATURES
而WriteNullListAsEmpty 就被包含在 WRITE_MAP_NULL_FEATURES之中
@wenshao 不是很理解,为什么设置了WriteNullBooleanAsFalse、WriteNullListAsEmpty、WriteNullNumberAsZero、WriteNullStringAsEmpty这些feature之后,null字段需要被输出。而且只有在ASM的情况下会这样,而Android不会。
在spring-mvc中配置了fastjson序列化:
导致Date类型的属性null值时,也输出来了,不加这个WriteNullListAsEmpty配置是不输出null字段的。