FastJson - 设置默认参数,全局配置方式及爬坑

简介: FastJson - 设置默认参数,全局配置方式及爬坑

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

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


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

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


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

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


@JSONField(format="yyyyMMdd")
private Date 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方法体中设置(SpringBoot 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ㄒ)/~~


目录
相关文章
|
3月前
|
缓存 前端开发 JavaScript
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
92 1
|
6月前
|
小程序 安全 算法
mPaaS问题之使用小程序传参数报错如何解决
mPaaS小程序是阿里巴巴移动平台服务(mPaaS)推出的一种轻量级应用解决方案,旨在帮助开发者快速构建跨平台的小程序应用;本合集将聚焦mPaaS小程序的开发流程、技术架构和最佳实践,以及如何解决开发中遇到的问题,从而助力开发者高效打造和维护小程序应用。
|
前端开发
前端学习案例-参数默认值是函数2
前端学习案例-参数默认值是函数2
85 0
前端学习案例-参数默认值是函数2
|
前端开发
前端学习案例-参数默认值是函数1
前端学习案例-参数默认值是函数1
65 0
前端学习案例-参数默认值是函数1
Postman内置动态参数和自定义的动态参数以及断言方式
Postman内置动态参数和自定义的动态参数以及断言方式。每次请求均需手动修改参数时,使用动态参数:内置动态参数/自定义动态参数,解决上述问题
504 0
Postman内置动态参数和自定义的动态参数以及断言方式
|
测试技术
loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取
loadrunner 脚本开发-参数化之将内容保存为参数、参数数组及参数值获取
115 0
|
XML 前端开发 安全
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
161 0
【全网最全】JSR303参数校验与全局异常处理(从理论到实践别用if判断参数了)
|
Java 开发者 Spring
项目启动加载限流规则代码|学习笔记
快速学习项目启动加载限流规则代码
|
XML Java 数据库连接
变量命名冲突的解决思路(spring框架中使用${}动态引入用户名,想连接数据,结果访问被拒绝)
变量命名冲突的解决思路(spring框架中使用${}动态引入用户名,想连接数据,结果访问被拒绝)
166 0
变量命名冲突的解决思路(spring框架中使用${}动态引入用户名,想连接数据,结果访问被拒绝)
|
SQL JSON Java
Mybaties(十五) 分页插件使用, 参数校验以及全局异常处理
这里是Mybaties中高级应用了, 基于Mybaties+Springboot实现分页, 参数校验以及全局异常(干货满满!!!)