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")
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方法体中设置:
//先执行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
FastJSON 设置默认参数,全局配置方式 和 一些使用方式、坑的更多相关文章
- 获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1
获取列表数据时,getList 设置默认参数:getList(page = 1),点击分页及前往时,传page参数,其他使用page的默认值:1
- WebStrom配置多个项目的Dweployment时,设置默认的启动配置
有时候,我们在WebStrom中打开多个项目,但是每个项目可能的Deployment的配置不同,所以每次在项目中时,可能打开的网页并不对.所以需要设置默认的启动的Deployment.下面的内容是设置 ...
- 微信小程序中,如果没有参数,如何设置默认参数?
现在学会小程序,这方面的知识,需要积累. 现在的情况是这样: 如果想从后端获取产品列表,而这些列表是可以根据分类来获取的,也是可以获取所有产品的. 那么,为了不使小程序报错,那么,我们就可以将不传的参 ...
- Linux下设置swappiness参数来配置内存使用到多少才开始使用swap分区(转)
swappiness的值的大小对如何使用swap分区是有着很大的联系的.swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用s ...
- vue.js实战——方法设置默认参数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 关于Eclipse的工作空间设置默认个数和配置
&
- IDEA设置默认maven配置
我们有时候自己在本机上配置了一个maven环境.但是IDEA每次新开一个项目都要重新选择一个maven的配置就很麻烦,可以使用这个进行设置默认的maven配置 有的版本IDEA不同显示的内容和图片的不 ...
- 【Unity】13.2 通过Lighting Window设置相关参数
分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 Unity 5.3.4的Lighting Window有3个选项卡:Object.Scene.Lightmaps. 二. ...
- Python tricks(2) -- method默认参数和闭包closure
Python的method可以设置默认参数, 默认参数如果是可变的类型, 比如list, map等, 将会影响所有的该方法调用. 下面是一个简单的例子 def f(a=None, l=[]): if ...
随机推荐
- win7 64位安装opencv3.0
一.去官网下载opencv3.0 下载Win pack,下载后解压,自己在D盘下新建了文件夹OpenCV3.3_win D:\OpenCV3.3_win,把下载到的Win pack解压到里面.解压或者 ...
- Hibernate(2)映射文件Xxx-hbm.xml
1.Hibernate映射文件Xxx-hbm.xml ①POJO 类和关系数据库之间的映射可以用一个XML文档来定义.通过 POJO 类的数据库映射文件,Hibernate可以理解持久化类和数据表之间 ...
- Cenos7 部署asp.net core站点
系统版本 rpm -q centos-release --- centos-release--5.1804.el7.centos.x86_64 安装libicu yum install libunwi ...
- Kubernetes中的Configmap和Secret
本文的试验环境为CentOS 7.3,Kubernetes集群为1.11.2,安装步骤参见kubeadm安装kubernetes V1.11.1 集群 应用场景:镜像往往是一个应用的基础,还有很多需要 ...
- 表型数据(Phenotype Data)基本概念
表型(英语:Phenotype),又称表现型,对于一个生物而言,表示它某一特定的物理外观或成分.一个人是否有耳珠.植物的高度.人的血型.蛾的颜色等等,都是表型的例子. 表型主要受生物的基因型和环境影响 ...
- sql格式化并高亮
演示地址: https://ryan-miao.github.io/sql-format-with-highlight/index.html 源码: https://github.com/Ryan-M ...
- 解决 安装VMwanre tools时 Enter the path to the kernel header files for the 3.10.0-862.14.4.el7.x86_64 kernel
1.使用ctrl+z停止安装vmtools安装 2.然后yum升级kernel-devel yum -y install kernel-devel
- jquery中选择器input:hidden和input[type=hidden]的区别
关于选择器:hidden的说明,在jquery说明文档中是这样说的:匹配所有不可见元素,或者type为hidden的元素.而[type=hidden]是查找所有type属性等于hidden的元素.两者 ...
- R语言学习-set.seed()
今天查了一下R语言中set.seed(),该命令的作用是设定生成随机数的种子,种子是为了让结果具有重复性.如果不设定种子,生成的随机数无法重现. > x<-rnorm(10) #随机生成1 ...
- Effective Java 第三版——62. 当有其他更合适的类型时就不用字符串
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...