Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)

最近改项目遇到了一些小问题,特此记录。

问题一:Map转Json报空

报错如下:

2023-04-10 23:40:00.129  WARN 12584 --- [nio-8010-exec-3] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Null key for a Map not allowed in JSON (use a converting NullKeySerializer?) (through reference chain: com.example.stu.utils.ResultUtil["data"]->java.util.HashMap["null"])]

意思是传回来的map的key是null,不能转为json。再看最后打印出来的查询结果如下:

ResultUtil(path=null, code=200, msg=获取单个用户成功, data={null={stu_id=1, password=123456, major=sw, create_time=2023-04-07 18:11:50, school=scsf, sname=lili, sex=, sage=18, stu_class=2, card_id=502031425608093546, status=true}})

map的key值确实为null,解决方案是要么重新给一个key去掉null,要么重新序列化。然后我将这个map放进了list里面,打印结果如下:

ResultUtil(path=null, code=200, msg=获取单个用户成功, data=[{stu_id=1, password=123456, major=sw, create_time=2023-04-07 18:11:50, school=scsf, sname=lili, sex=, sage=18, stu_class=2, card_id=502031425608093546, status=true}])

这样看来没有了null,但不能满足前端队友的需求,最后我引入了fastjson进行序列化将返回值转化为json(如果Fastjson引入失败看这篇文章:程序包com.alibaba.Fastjson不存在),问题解决。

问题二:Date类型转String类型

序列化问题解决了,但返回的数据中有一个Date类型的时间字段显示为一段长数字如4373842925341。
原因是因为json不能存储Date对象,必须将Date转换为String,再转换为Date。于是我先获取到该字段的值,然后用时间转换将Date转换为String,最后该字段重新赋值给map中对应的key并序列化返回:

//时间转换:将Date转换为String
SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(time));

问题解决。

待解决内容

  1. Map、List和Set三者各自的区别、应用场景及深入理解
  2. 为什么用Fastjson?
  3. 什么是序列化,为什么要用序列化?
  4. JSON.parse 和 JSON.stringify的区别
  5. JSON.toJSONString与toString、String.valueOf的区别
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值