Jackson反序列化时@JsonProperty不生效属性为null如何解决
问题根源
你当前的ObjectMapper显式设置了JaxbAnnotationIntrospector作为唯一的注解解析器,该解析器仅支持JAXB规范的注解(如@XmlElement),无法识别Jackson原生的@JsonProperty注解,因此字段映射规则失效,导致反序列化后identityBuy属性值为null。
解决方案
可根据你的业务需求选择以下任意一种方案:
- 方案一(无JAXB注解依赖时推荐):直接删除
mapper.setAnnotationIntrospector(new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()));这行配置,ObjectMapper默认使用的JacksonAnnotationIntrospector会自动识别@JsonProperty注解。 - 方案二(需要同时支持JAXB注解和Jackson注解时):使用
AnnotationIntrospectorPair组合两种注解解析器,同时兼容两类注解的规则。 - 方案三(不修改ObjectMapper配置时可选):将POJO字段上的
@JsonProperty("ID_BUY")替换为JAXB注解@XmlElement(name = "ID_BUY")。
兼容双注解的配置示例
ObjectMapper mapper = new ObjectMapper() .configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true) .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .configure(MapperFeature.USE_ANNOTATION, true); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 组合Jackson原生注解解析器与JAXB注解解析器 AnnotationIntrospector jacksonIntrospector = new JacksonAnnotationIntrospector(); AnnotationIntrospector jaxbIntrospector = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); AnnotationIntrospector combinedIntrospector = AnnotationIntrospector.pair(jacksonIntrospector, jaxbIntrospector); mapper.setAnnotationIntrospector(combinedIntrospector);
修改配置后重新执行反序列化,即可正确将ID_BUY的值映射到identityBuy属性,Jackson会自动将JSON中的数字类型转为POJO中定义的String类型。
内容的提问来源于stack exchange,提问作者AKJ
相关产品推荐
相关产品推荐

