toJSONString空值被忽略解决办法 & toJSONString过程中时间格式丢失问题解决办法

toJSONString空值被忽略解决办法

原代码:

复制代码
GcGarbageBuildingDO data = gcGarbageBuildingService.get(id);
result.putAll(JSON.parseObject(JSON.toJSONString(data), Map.class));

查询出来的data中部分字段值为null,在toJSONString的过程中会把null值过滤掉,最后导致转换后的数据中部分字段丢失了

data值:null还在

执行toJSONString后:null值全部被过滤掉了

解决办法:用 toJSONString(Object object, SerializerFeature... features)

复制代码
GcGarbageBuildingDO data = gcGarbageBuildingService.get(id);
result.putAll(JSON.parseObject(JSON.toJSONString(data, SerializerFeature.WRITE_MAP_NULL_FEATURES), Map.class));

JSONString源码:

SerializerFeature属性:

复制代码
名称	          含义
QuoteFieldNames	输出key时是否使用双引号,默认为true
UseSingleQuotes	使用单引号而不是双引号,默认为false
WriteMapNullValue	是否输出值为null的字段,默认为false
WriteEnumUsingToString	Enum输出name()或者original,默认为false
SortField	按字段名称排序后输出。默认为false
WriteTabAsSpecial	把\t做转义输出,默认为false
PrettyForma	结果是否格式化,默认为false
WriteClassName	序列化时写入类型信息,默认为false。反序列化是需用到

toJSONString过程中时间格式丢失问题解决办法

上面的转换解决后又碰到了另一个问题,实体类中有Date类型数据,原本已经使用了下面两个注解对时间进行格式化:

复制代码
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")

但是在toJSONString的过程中,这个时间格式丢失了,返回的数据变成了时间戳以及fastime

解决办法:toJSONStringWithDateFormat(Object object, String dateFormat, SerializerFeature... features)

复制代码
result.putAll(JSON.parseObject(JSON.toJSONStringWithDateFormat(data, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue), Map.class));

toJSONStringWithDateFormat源代码:

结果如下:

其实还是有点问题,如果这个实体类里面有多种Date格式,就比如openStartHours这个属性,应该是HH:mm:ss格式,但这个方法好像只能使Date类型的属性共用一种时间格式,只能后续对值进行截取,要是有更好的解决办法欢迎指教。

相关推荐
Hexene...19 小时前
【前端Vue】出现elementui的index.css引入报错如何解决?
前端·javascript·vue.js·elementui
红色的小鳄鱼19 小时前
Vue 监视属性 (watch) 超全解析:Vue2 Vue3
前端·javascript·css·vue.js·前端框架·html5
web小白成长日记19 小时前
Vue-实例从 createApp 到真实 DOM 的挂载全历程
前端·javascript·vue.js
晚霞的不甘19 小时前
Flutter for OpenHarmony实现高性能流体粒子模拟:从物理引擎到交互式可视化
前端·数据库·经验分享·flutter·microsoft·计算机视觉
rainbow688919 小时前
Java实战:5230台物联网设备时序数据处理方案
java
晚霞的不甘19 小时前
Flutter for OpenHarmony 流体气泡模拟器:用物理引擎与粒子系统打造沉浸式交互体验
前端·flutter·ui·前端框架·交互
爬山算法19 小时前
Hibernate(80) 如何在数据迁移中使用Hibernate?
java·oracle·hibernate
Elias不吃糖19 小时前
Day1 项目启动记录(KnowledgeDock)
java·springboot·登陆·项目启动
colicode19 小时前
发送语音通知接口技术手册:支持高并发的语音消息发送API规范
前端
belldeep19 小时前
Java:Tomcat 9, flexmark 0.6 和 mermaid.min.js 10.9 实现 Markdown 中 Mermaid 图表的渲染
java·tomcat·mermaid·flexmark