jackson反序列化:Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string.
jackson反序列化问题
今天在将jackson转为的字符串重新转回对象的时候,异常了
Unexpected token (START_OBJECT), expected VALUE_STRING: Expected array or string.
看下面一行,说是其中一个字段转换失败 private LocalDateTime createTime;
开始以为是jackson配置的原因:https://www.cnblogs.com/niceboat/p/7284099.html
试了之后发现无效,就看了一下jackson之前序列化的字符串,发现 createTime转换的内容有点不对劲
"createTime": {
"year": 2020,
"monthValue": 3,
"month": "MARCH",
"dayOfMonth": 24,
"dayOfYear": 84,
"dayOfWeek": "TUESDAY",
"hour": 17,
"minute": 52,
"second": 31,
"nano": 0,
"chronology": { "calendarType": "iso8601", "id": "ISO" }
},
这什么鬼格式啊,明明返回给前端的时候不是这个样子的,是很正常的时间格式 2020-03-24 17:52:31
。
研究之后发现,我的框架是SpringBoot,其中集成的jackson已经被我配置了关于LocalDateTime 的处理,所以接口返回前端的时候没有问题;但是项目中使用的时候,在序列化的时候是new ObjectMapper()
的,SpringBoot中的配置和新创建的不一样,所以在序列化和反序列化的时候,对LocalDateTime 的处理完全不一样导致的转换失败
解决方法
统一序列化、反序列化的方法,要么全部使用新创建的ObjectMapper,要么使用SpringBoot中配置了的(建议使用SpringBoot中的,毕竟一些配置还是很有必要的)
- 使用SpringBoot中的
@Autowired
private ObjectMapper objectMapper;
//若是在工具类中,这个类需要添加 @Component ,使其能够被spring检测到
或者获取bean
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
private static ObjectMapper objectMapper = ac1.getBean("objectMapper",ObjectMapper.class);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?