expected value java_jackson反序列化:Unexpected token (START_OBJECT), expected VALUE_STRING: Expected arr...

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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值