当前位置: 首页 > 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 类 或 提取为独立类

相关文章:

  • 《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测量系统在职业病防治中的应用
  • 视频|王弘治:王太后,“先天宫斗圣体”?
  • 真人秀《幸存者》百万美元奖金,25年间“缩水”近一半
  • 国内首例侵入式脑机接口系统前瞻性临床试验:受试者已能用意念玩游戏
  • “电竞+文旅”释放价值,王者全国大赛带火赛地五一游
  • 首映丨纪录电影《滚烫年华》:献给所有奋斗者
  • 碧桂园:砸锅卖铁保交房、持续推进保主体,尽快让公司恢复正常经营