前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jackson快速替换Fastjson,Cannot construct......cannot deserialize

Jackson快速替换Fastjson,Cannot construct......cannot deserialize

作者头像
chenchenchen
发布2019-09-02 17:43:46
3K0
发布2019-09-02 17:43:46
举报
文章被收录于专栏:chenchenchenchenchenchen

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_38004638/article/details/98612807

一· 概述

Fastjson已经连续几次爆出高危漏洞,和Structs一样,每次影响范围都比较广,殃及几乎所有的JAVA后台系统。为避免以后频繁地应急处理Fastjson的安全漏洞,痛定思痛,决定放弃Fastjson转投jackson的怀抱了。

二· 快速替换

2.1 加入依赖

在pom文件中添加jackson的依赖包,如下:

代码语言:javascript
复制
    <properties>
        <jackson-version>2.9.9</jackson-version>
    </properties>
    ...

    <dependencyManagement>
        <dependencies>
            <!--jackson-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson-version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson-version}</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson-version}</version>
            </dependency>
            ...

2.2 替换方法

将java对象转换成json字符串

Jackson

代码语言:javascript
复制
ObjectMapper objectMapper = new ObjectMapper();  

String json =objectMapper.writeValueAsString(obj);  

return json; 

FastJson

代码语言:javascript
复制
return JSON.toJSONString(object); 

json字符串转换为相应的JavaBean对象

Jackson

代码语言:javascript
复制
ObjectMapper objectMapper = new ObjectMapper();  
   
Object vo = objectMapper.readValue(json, cls);  
  
return vo;

FastJson

代码语言:javascript
复制
return JSON.parseObject(jsonStr, valueType);

三、应用报错

报错如下:

Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.aspire.commons.idgenerator.zookeeper.ZkNode` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (String)"{"hostName":"sz-chenyuanyao.aspire.aspire-tech.com","ip":"192.168.64.1","pid":"16440","sessionId":72057600293011457,"workerId":0}"; line: 1, column: 2]

翻译如下:

由于:com.fasterxml.jackson.databind.exc.invalidDefinitionException:无法构造'com.aspire.commons.idGenerator.zookeeper.zknode'的实例(不存在创建者,如默认构造):无法从对象值反序列化(不存在委托创建者或基于属性的创建者)

在[来源:(字符串)“”hostname“:”sz chenyuyao.aspire.aspire-tech.com“,”ip“:”192.168.64.1“,”pid“:”16440“,”sessionid“:72057600293011457,”workerid“:0”行:1,列:2]

主要错误:

构造对象失败、反序列化失败

解决:

1、在实体类中补上一个无参构造器

2、在实体类中添加以下注解即可解决。

代码语言:javascript
复制
@JsonIgnoreProperties(value = {"hibernateLazyInitializer", "handler"})

3、可能是版本不兼容的问题,JACKSON版本为2.2.3,而用的Spring版本为5.0.0.RELEASE,换成4.1.9.RELEASE的就行了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年08月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一· 概述
  • 二· 快速替换
    • 2.1 加入依赖
      • 2.2 替换方法
        • 将java对象转换成json字符串
        • json字符串转换为相应的JavaBean对象
    • 三、应用报错
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档