zoukankan      html  css  js  c++  java
  • 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);
    
  • 相关阅读:
    二十一、Mysql之GTID
    二十、Mysql的过滤复制
    十九、Mysql的半同步复制
    十八、Mysql之延时从库
    十七、Mysql的主从(三)--主从故障监控分析
    抖音爬虫
    python 操作手机
    python sheet写入数据
    pandas用法大全
    caog
  • 原文地址:https://www.cnblogs.com/ziyue7575/p/13769085.html
Copyright © 2011-2022 走看看