Java Object Mapper反序列化问题:message字段映射为null原因排查
问题原因及修复方案
核心问题:字段与 getter/setter 逻辑不匹配
你的SystemEvent类存在字段定义和 getter/setter 方法不对应的错误:
- 类中声明的是
private String message;字段 - 但
getMessage()返回的是未声明的msgId变量,setMessage()也是给msgId赋值 - 而
toString()方法输出的是message字段,导致最终显示null
执行流程拆解
序列化时:
ObjectMapper通过 getter 方法名映射JSON字段,getMessage()对应JSON里的"message"键,所以会把msgId的值(测试中设置的"msg123")写入JSON,因此序列化结果正常。反序列化时:
ObjectMapper根据JSON的"message"键调用setMessage(),但该方法只修改msgId,完全没碰message字段,所以toString()输出时message自然是null。
修复代码
修正 getter/setter 方法,使其操作正确的message字段:
public String getMessage() { return this.message; } public void setMessage(String message) { this.message = message; }
同时注意:当前代码中未声明msgId字段,编译时会报错,这也是笔误导致的问题,修正后即可解决反序列化后message为null的情况。
内容的提问来源于stack exchange,提问作者DeeP
相关产品推荐
相关产品推荐

