fastjson序列化 将Null设置为空字符串等问题
来源:互联网 发布:无人机传感器数据测试 编辑:程序博客网 时间:2024/04/28 21:33
如果只是想解决springmvc+fastjson的配置相关问题以及如标题所述问题,可以看:http://www.cnblogs.com/exmyth/p/4563673.html
fastjson有一个枚举类控制输出的格式,可以根据不一样的类型单独设置输出格式,例如:值为null的属性是否输出该字段,值为Null的字段如何处理输出等等。
但个人感觉不是特别完善,没有一个全局的开关,将所有值为null的字符设置为空字符串。Number类型的字段只能设置为0,不能设置为空字符串(可能是我没读懂源码吧)。
看了下源码,总结下自己的理解:fastjson是通过类型去生成的,接口:ObjectSerializer,实现类按类型分,比如:List/Map/JavaBean等均有各自的生成器,一共有如下:
JavaBean就是通过JavaBeanSerializer处理的,如标题的解决办法
类型为String,将null值设置为空字符串:
java实体 ccc
class ccc{ public BigDecimal getBbb() { return bbb; } public void setBbb(BigDecimal bbb) { this.bbb = bbb; } public String getUsername() { return username; } public BigDecimal bbb; public void setUsername(String username) { this.username = username; } private String username;}
测试main:
ccc c = new ccc();JSON.toJSONString(c,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullStringAsEmpty)
类型为Number,也就是以下所有类型,可以将Null设置为0,不能设置为空字符串,若想解决该问题,自己可以写一个转换器:
测试main:
ccc c = new ccc();JSON.toJSONString(c,SerializerFeature.WriteMapNullValue,SerializerFeature.WriteNullNumberAsZero)
fastjson:属性为null值的处理逻辑,如下源码:
if (propertyValue == null) { Class<?> runtimeFieldClass = runtimeInfo.runtimeFieldClass; SerializeWriter out = serializer.out; if (Number.class.isAssignableFrom(runtimeFieldClass)) { out.writeNull(features, SerializerFeature.WriteNullNumberAsZero.mask); return; } else if (String.class == runtimeFieldClass) { out.writeNull(features, SerializerFeature.WriteNullStringAsEmpty.mask); return; } else if (Boolean.class == runtimeFieldClass) { out.writeNull(features, SerializerFeature.WriteNullBooleanAsFalse.mask); return; } else if (Collection.class.isAssignableFrom(runtimeFieldClass)) { out.writeNull(features, SerializerFeature.WriteNullListAsEmpty.mask); return; } ObjectSerializer fieldSerializer = runtimeInfo.fieldSerializer; if ((out.isEnabled(SerializerFeature.WriteMapNullValue)) && fieldSerializer instanceof JavaBeanSerializer) { out.writeNull(); return; } fieldSerializer.write(serializer, null, fieldInfo.name, fieldInfo.fieldType, fieldFeatures); return; }
1 0
- fastjson序列化 将Null设置为空字符串等问题
- fastjson序列化数据为空的字段如何处理的问题
- SQL语句将Null值转换为字符串空
- jackson 实体转json 为NULL或者为空字符串或默认值时不参加序列化
- FastJson序列化问题
- Spring mvc3 jackson输出null为空字符串问题
- jackson ObjectMapper 序列化成json; 属性值为null时转换为""空字符串
- fastjson序列化时去掉null字段
- Power Designer将字段默认值设置为字符串的空
- fastJson将json字符串转换为map
- Java判断字符串为空的方法,效率等问题
- springMVC将属性""空字符串转为null
- fastjson 序列化枚举问题
- 在.net下将saleforce字段值更新为null或空字符串。
- js判断为空Null与字符串为空实例
- js判断为空Null与字符串为空实例
- js判断为空Null与字符串为空实例
- Gson解析null替换为空字符串
- /bin,/sbin,/usr/sbin,/usr/bin 目录简介
- 推博(持续更新)
- 关于扩展欧几里德
- 【杭电2504】又见GCD
- 枚举
- fastjson序列化 将Null设置为空字符串等问题
- Windows下安装Redis及开启php扩展
- ExpandableListView的使用,可展开的ListView
- poj 1654 area 简单多边形面积(简单题)
- Java 集合类(容器)
- Asset Loading
- js注意事项04
- 深入理解Windows X64调试
- Java 之 线程的生命周期(三)