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

使用maven-jaxb2-plugin生成DTO后,解析XML时出现Jackson UnrecognizedPropertyException问题求助

解决Jackson反序列化JAXB生成DTO时的UnrecognizedPropertyException问题

你的问题核心在于Jackson的XmlMapper默认不会自动识别JAXB的注解,导致它无法将XML中的Publish_Date字段映射到DTO里带@XmlElement(name = "Publish_Date")注解的publishDate属性上。关闭FAIL_ON_UNKNOWN_PROPERTIES只是治标,我们可以通过让Jackson支持JAXB注解来彻底解决这个问题。

具体解决方案

1. 添加Jackson JAXB注解模块依赖

首先确保你的项目中引入了jackson-module-jaxb-annotations依赖(如果用Maven的话):

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-jaxb-annotations</artifactId>
    <version>你的Jackson版本号</version>
</dependency>

注意版本要和你使用的Jackson其他组件(比如jackson-databind、jackson-dataformat-xml)保持一致,避免版本冲突。

2. 修改XmlMapper配置,注册JaxbAnnotationModule

在你配置XmlMapper的代码中,添加JAXB注解模块的注册:

JacksonXmlModule module = new JacksonXmlModule();
module.setDefaultUseWrapper(false);

// 新增:注册JAXB注解模块,让Jackson识别@XmlElement等注解
JaxbAnnotationModule jaxbModule = new JaxbAnnotationModule();
module.registerModule(jaxbModule);

final XmlMapper xmlMapper = new XmlMapper(module);
xmlMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true);
// 现在可以去掉FAIL_ON_UNKNOWN_PROPERTIES的关闭配置了
// xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

final MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(xmlMapper);
converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_XML));
return new RestTemplateBuilder()
        .setReadTimeout(Duration.ofMillis(readTimeout))
        .setConnectTimeout(Duration.ofMillis(connectTimeout))
        .messageConverters(converter)
        .build();

为什么这个方案有效?

JAXB生成的DTO使用@XmlElement(name = "...")来指定XML字段和Java属性的映射关系,但Jackson的默认XML模块只识别自身的@JsonProperty或@JacksonXmlProperty注解。通过注册JaxbAnnotationModule,Jackson会自动读取JAXB的注解信息,从而正确将XML中的Publish_Date、Record_Count字段映射到Java类的publishDate、recordCount属性上,自然就不会再抛出UnrecognizedPropertyException了。

额外检查点

  • 确认你的Jackson版本没有太老旧,较新版本的jackson-module-jaxb-annotations对JAXB注解的支持更完善。
  • 检查生成的DTO中@XmlElement(name)的属性值是否和XML中的字段名完全一致(你的案例中是匹配的,Publish_Date对应正确)。

内容的提问来源于stack exchange,提问作者Dogukan Evcil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:22:30