fastjson safemode_FastJSON 设置默认参数,全局配置方式 和 一些使用方式、坑

如果要被序列化的对象含有一个date属性或者多个date属性按照相同的格式序列化日期的话,那我们可以使用下面的语句实现:

在应用的的Main方法体里配置全局参数:

JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd";//设置日期格式

或者使用时传递配置参数

JSONObject.toJSONString(resultMap, SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteDateUseDateFormat);

但是上面的解决方案面临一个问题,如果不满足上面的条件(多个date属性,而且需要按照不定的格式序列化这些日期属性),那么我们就需要另辟蹊径,使用fastjson的特性来完成:

@JSONField(format="yyyyMMdd")privateDate date;

@JSONField(format="yyyy-MM-dd HH:mm:ss")private Date date1;

如果希望DTO转换输出的是下划线风格(fastjson默认驼峰风格),请使用:

@JSONField(name="service_name")private String serviceName;

FastJSON全局配置说明

SerializerFeature.PrettyFormat:格式化输出

SerializerFeature.WriteMapNullValue:是否输出值为null的字段,默认为false

SerializerFeature.DisableCircularReferenceDetect:消除循环引用

SerializerFeature.WriteNullStringAsEmpty:将为null的字段值显示为""

WriteNullListAsEmpty:List字段如果为null,输出为[],而非null

WriteNullNumberAsZero:数值字段如果为null,输出为0,而非null

WriteNullBooleanAsFalse:Boolean字段如果为null,输出为false,而非null

SkipTransientField:如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true

SortField:按字段名称排序后输出。默认为false

WriteDateUseDateFormat:全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);

BeanToArray:将对象转为array输出

QuoteFieldNames:输出key时是否使用双引号,默认为true

UseSingleQuotes:输出key时使用单引号而不是双引号,默认为false(经测试,这里的key是指所有的输出结果,而非key/value的key,而是key,和value都使用单引号或双引号输出)

想要全局配置的话,请在Main方法体中设置:

//先执行static代码块,再执行该方法//是否输出值为null的字段,默认为false

JSON.DEFAULT_GENERATE_FEATURE |=SerializerFeature.WriteMapNullValue.getMask();//数值字段如果为null,输出为0,而非null

JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullNumberAsZero.getMask();//List字段如果为null,输出为[],而非null

JSON.DEFAULT_GENERATE_FEATURE |=SerializerFeature.WriteNullListAsEmpty.getMask();//字符类型字段如果为null,输出为 "",而非null

JSON.DEFAULT_GENERATE_FEATURE |= SerializerFeature.WriteNullStringAsEmpty.getMask()

暂时未找到xml方式的配置方法,/(ㄒoㄒ)/~~

同时上面红色部分在Dubbo环境下,rpc数据序列化使用fastjson会有坑。

传递给下游的Bean对象里,如果类属性是基础数据包装对象,比如Byte,fastson反序列化后会给该字段设置默认值0。

但你的本意是该属性应该是null,结果却是0。

对于程序开发来说0是有意义的数据,最终导致出现BUG、或者数据被0覆盖更新。

切记切记,全局配置慎用!/(ㄒoㄒ)/~~

PS:

https://blog.csdn.net/qq_34120041/article/details/83114744

https://www.cnblogs.com/xd03122049/p/6079695.html

https://blog.csdn.net/john1337/article/details/76277617

https://blog.csdn.net/zjkyx888/article/details/78673898

https://blog.csdn.net/fly910905/article/details/78474813

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值