使用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
相关产品推荐
相关产品推荐

