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


目录
相关文章
|
JavaScript 前端开发 BI
最好用的 7 款 Vue admin 后台管理系统测评
Vue admin 后台管理系统作为每个项目必备的管理后台,对大家来说十分重要。选不好,配不好,不仅现在用着抓狂,未来迭代升级也困难重重,步步是坑。所以在技术选型阶段,就要对市面上主流的 Vue admin 做到全面了解,知道他们的优缺点,再根据自己项目的需求,有针对性的选择。我试用了市面上所有主流 Vue admin 都 npm 到本地测了一遍,筛掉长期不更新,bug 明显,社区活跃度低,功能单一的 admin 后台,把最好、最有特点的 7 款 Vue admin 挑出来,分享给大家。这些后台各有各的特点,有些功能多样,但整体很重;有些虽然稳定,但上线年头久远,含有大量陈旧功能;有些功能
3855 0
|
JSON fastjson Java
下个十年高性能 JSON 库来了:fastjson2!
下个十年高性能 JSON 库来了:fastjson2!
2394 0
|
7月前
|
JSON 安全 fastjson
使用阿里巴巴 Fastjson 替代 Spring Boot 默认的 Jackson
本文介绍在 Spring Boot 项目中如何替换默认的 Jackson,集成阿里巴巴 Fastjson 作为 JSON 处理框架。内容涵盖 Fastjson 与 Jackson 的核心对比、依赖配置、自定义消息转换器、null 值统一处理及循环引用控制,并提供安全建议与最佳实践,助你高效、安全地使用 Fastjson。
|
前端开发 Java 开发者
【springboot】中使用--WebMvcConfigurer
通过实现 `WebMvcConfigurer` 接口,Spring Boot 开发者可以灵活地自定义和扩展 Spring MVC 的配置。无论是视图解析、拦截器、跨域请求处理,还是静态资源和消息转换器配置,`WebMvcConfigurer` 都提供了一致的接口来实现这些功能。掌握这些配置方法,可以使开发者在 Spring Boot 项目中更加游刃有余地进行各种定制化需求的开发。
944 14
|
NoSQL Java Redis
Jedis高版本的JedisPoolConfig没有maxActive和maxWait
在高版本的Jedis中,连接池配置属性发生了一些变化。通过使用 `JedisPoolConfig`中的新属性,可以更好地管理和优化Redis连接池。本指南提供了详细的配置方法和示例代码,帮助开发者快速上手并正确配置Jedis连接池。希望本文对您有所帮助,能够在项目中高效地使用Jedis与Redis。
584 14
|
自然语言处理 fastjson Java
记一次细思极恐的FastJson差点引发的大面积故障
作者记录了一次FastJson差点引发的大面积故障的排查过程和解决方案。
|
缓存 Java 数据库
SpringBoot中ThreadPoolTaskExecutor的使用
SpringBoot中ThreadPoolTaskExecutor的使用
820 0
|
存储 JSON fastjson
聊聊fastjson反序列化的那些坑
聊聊fastjson反序列化的那些坑
3890 0
聊聊fastjson反序列化的那些坑
|
Java
Java Exception打印及输出到日志
有时候如果打印出异常的错误,并记录下来,这里记录一下
1211 5
|
缓存 Java 数据格式
如何利用缓存机制实现JAVA类反射性能提升30倍
一次性能提高30倍的JAVA类反射性能优化实践

热门文章

最新文章