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ㄒ)/~~


目录
相关文章
|
fastjson
fastjson设置指定日期属性的格式化
fastjson默认将时间格式化为时间戳,如果我们想以时间字符串格式输出的话,暂提供两种方式 1.序列化器方式 声明DateJsonSerializer public class DateJsonSerializer implements Object...
7166 1
|
数据采集 Java
自定义 ForkJoinPool 提升并行流 ParallelStream 执行速度
简介 在 java8 中 添加了流Stream,可以让你以一种声明的方式处理数据。使用起来非常简单优雅。ParallelStream 则是一个并行执行的流,采用 ForkJoinPool 并行执行任务,提高执行速度。
8258 1
|
存储 缓存 算法
Flink RocksDB 状态后端参数调优实践
RocksDB 的配置也是极为复杂的,可调整的参数多达百个,没有放之四海而皆准的优化方案。如果仅考虑 Flink 状态存储这一方面,我们仍然可以总结出一些相对普适的优化思路。本文先介绍一些基础知识,再列举方法。
Flink RocksDB 状态后端参数调优实践
|
存储 JSON fastjson
再也不用心惊胆战地使用FastJSON了——序列化篇
本篇将主要介绍json序列化的详细流程。本文阅读的FastJSON源码版本为2.0.31。
3996 49
|
Java Maven Kotlin
idea maven创建kotlin项目
本文介绍了在IntelliJ IDEA中使用Maven创建Kotlin项目的步骤,包括在`pom.xml`文件中添加Maven中央仓库、配置`kotlin-maven-plugin`插件、指定源目录、添加测试插件和执行插件,以及添加Kotlin测试依赖和标准库依赖。文中还提到了如何通过更换镜像或使用代理来解决依赖下载速度慢的问题,并展示了运行示例代码的截图。
778 4
idea maven创建kotlin项目
|
缓存 负载均衡 安全
IDEA设置Tabs多行显示的方法
这篇文章介绍了在IntelliJ IDEA中设置多行显示Tabs的方法,包括如何取消单行展示Tabs并设置可展示的Tabs数量。
IDEA设置Tabs多行显示的方法
|
监控 安全 开发工具
git fatal: detected dubious ownership in repository at ‘xxx‘ 彻底解决方法
调整文件所有权和权限后,你应该能够无误地进行Git操作。持续的维护与监控文件系统的安全性能降低将来遇到类似问题的风险,并保证团队能够高效协作。如果你是在团队环境中工作,建议建立明确的协作规则和文件管理实践,以避免此类问题。
1847 3
|
Java 应用服务中间件 Spring
记录SpringCloudGateway的一个隐藏问题
线上生产环境中,一个SCG接口偶发性出现“Connection reset by peer”错误。排查发现问题是由于Netty的HTTP客户端连接池保持了已由服务端关闭的连接。解决方案是配置连接池以在超时后回收连接(超时时间应小于Tomcat的连接超时时间),并考虑将连接池获取策略从FIFO改为LIFO,以减少使用无效连接的可能性。通过修改Spring Cloud Gateway的HTTP客户端连接池配置和添加JVM启动参数可以实现这一修复。
3777 1
|
监控 NoSQL 网络安全
Redis 6和7:探索新版本中的新特性
Redis 6和7:探索新版本中的新特性