当前位置: 首页 > news >正文

Jackson 使用问题记录(持续更新)

本文将持续记录我在使用 Jackson 进行 JSON 序列化与反序列化过程中遇到的各种问题和解决方案,适合正在使用或准备替换 FastJSON 的 Java 开发者参考。


问题一:非静态内部类无法反序列化

0、使用

 @Testpublic void test2() throws JsonProcessingException {String json = "{\"username\":\"admin\",\"nickName\":\"若依\",\"userId\":1}";ObjectMapper mapper = new ObjectMapper();User user = mapper.readValue(json, User.class);System.out.println(user.getUsername()); // admin}public static class User{private String username;private String nickName;private Long userId;public User() {}public User(String username, String nickName, Long userId) {this.username = username;this.nickName = nickName;this.userId = userId;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public Long getUserId() {return userId;}public void setUserId(Long userId) {this.userId = userId;}}

1、异常信息:

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 
Cannot construct instance of `com.wenge.business.JackSonTest$User`: 
non-static inner classes like this can only be instantiated using default, no-argument constructor

2、出现场景:

当你尝试将一个 非静态内部类(non-static inner class) 作为 Jackson 反序列化的目标类型时,会抛出该异常。

例如:

public class JackSonTest {public class User { ... }
}

3、原因分析:

Java 中的非静态内部类隐式持有外部类的引用,因此不能通过默认无参构造函数创建实例。而 Jackson 默认依赖无参构造函数来构建对象,所以无法反序列化这类对象。

4、解决办法:

方法一:改为 static 静态内部类(推荐)

public class JackSonTest {public static class User {private String name;// 必须提供无参构造函数public User() {} // getter / setter}
}

方法二:提取为独立类(更推荐)

// 文件名:User.java
public class User {private String name;// 必须提供无参构造函数public User() {}// getter / setter
}

5、小结:

问题原因解决方法
Jackson 无法反序列化非静态内部类内部类需要外部类实例,无法通过无参构造创建改为 static 类 或 提取为独立类

http://www.dtcms.com/a/188981.html

相关文章:

  • 《Effective Python》第1章 Pythonic 思维总结——编写优雅、高效的 Python 代码
  • 数据结构(2)线性表-顺序表
  • 腾讯优化DeepSeek的DeepEP通信框架:开启AI大模型训练新时代
  • 运行Spark程序-在shell中运行 --SparkConf 和 SparkContext
  • 基于FPGA的视频接口之千兆网口(六GigE纯逻辑)
  • 深入理解BLP安全模型:信息安全中的“守密者”
  • 【力扣】K个一组翻转链表
  • 使用 百度云大模型平台 做 【提示词优化】
  • OpenMCU(七):STM32F103开发环境搭建
  • 如何选择与构建高效的网络流量分析平台
  • 【设备管理—磁盘调度算法】
  • 17.责任链模式:思考与解读
  • .Net HttpClient 处理错误与异常
  • Vue3+uniapp 封装axios
  • 计网实验笔记(一)CS144 Lab
  • 《猜拳游戏》
  • solidwors插件 开发————仙盟创梦IDE
  • uniapp开发4--实现耗时操作的加载动画效果
  • 按键精灵ios脚本新增元素功能助力辅助工具开发(三)
  • 应用探析|千眼狼PIV测量系统在职业病防治中的应用
  • 小天互连即时通讯:制造行业沟通协作的高效纽带
  • JavaScript 接收并解析后端发送的 JSON 数据,同时将数据以美观的方式展示在页面上
  • Kotlin-类和对象
  • TCP首部格式及三次握手四次挥手
  • 【学习笔记】Shell编程---流程控制语句
  • 【用「概率思维」重新理解生活】
  • 深入探讨 Java 性能术语与优化实践
  • 12.1寸工业液晶屏M121XGV20-N10显示单元技术档案
  • ubuntu22.04编译PX4无人机仿真实践
  • Git命令起别名