Jackson反序列化POJO时抛出无法识别device_id异常,加@JsonProperty仍报错
问题排查与解决步骤
- 第一步:排查Jackson注解包导入错误(最高发原因)
确认所有Jackson相关注解(@JsonProperty、@JsonIgnoreProperties、@JsonFormat)均导入自com.fasterxml.jackson.annotation包,而非旧版org.codehaus.jackson包。如果混用不同版本的Jackson依赖,注解会完全失效,导致@JsonProperty("device_id")字段映射不生效、@JsonIgnoreProperties(ignoreUnknown = true)忽略未知字段的配置也不生效,最终抛出你遇到的字段不识别异常。 - 第二步:修复POJO的语法错误
你提供的LogMdto类中重复定义了id字段,先后出现了两次private String id;的声明,这会干扰类加载和Jackson的字段扫描逻辑,请删掉其中一个重复的id字段定义。 - 第三步:确认ObjectMapper版本匹配
确认你使用的ObjectMapper导入自com.fasterxml.jackson.databind.ObjectMapper,和所有Jackson注解属于同一套依赖,不要新旧版本混用。 - 第四步:临时全局配置验证
如果上述排查都没有问题,可以给ObjectMapper添加全局忽略未知字段的配置,验证是否为类注解失效问题:
添加配置后如果可以正常反序列化,说明类上的ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);@JsonIgnoreProperties注解确实没有生效,回到第一步重新排查依赖和包导入问题。
附加注意事项
你的date字段的setter方法参数为String类型,Jackson默认会按照字段类型匹配setter参数,若后续出现date字段反序列化异常,可以给setDate方法添加@JsonSetter注解,或者直接将date字段类型改为LocalDateTime,Jackson原生支持ISO格式的LocalDateTime反序列化,不需要自定义setter逻辑。
内容的提问来源于stack exchange,提问作者Sergio B.
相关产品推荐
相关产品推荐

