You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:24:03