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

OpenAPI生成的Spring服务为何无法解析带同级元素的未包裹XML数组

问题成因
  • openapi-generator-maven-plugin v5.2.1版本的Spring代码生成器默认未开启XML注解生成逻辑,生成的POJO不会自动添加Jackson XML解析所需的序列化/反序列化注解,无法正确识别XML节点结构。
  • OpenAPI定义中配置的xml.wrapped = false未被正确映射为Jackson的@JacksonXmlElementWrapper(useWrapping = false)注解,导致Jackson XML解析器默认按包裹数组规则解析内容,把节点下第一个子节点的文本值误判为整个KYCInfo实例的构造入参,触发找不到字符串参数构造方法的报错。
  • 生成的CallbackRequestDataKYCInfo类缺少@JacksonXmlRootElement(localName = "KYCInfo")注解,解析器无法将独立的节点识别为该类的实例。
  • 若请求头未携带正确的Content-Type: application/xml,Spring会优先使用JSON消息转换器解析XML内容,也会触发类型不匹配错误。
修复方案

1. 调整openapi-generator插件配置

在pom.xml的openapi-generator-maven-plugin配置节点下开启XML注解生成:

<plugin>
    <groupId>org.openapitools</groupId>
    <artifactId>openapi-generator-maven-plugin</artifactId>
    <version>5.2.1</version>
    <configuration>
        <generatorName>spring</generatorName>
        <additionalProperties>
            <!-- 开启XML注解生成 -->
            <xmlAnnotations>true</xmlAnnotations>
            <!-- 其余原有配置保持不变 -->
        </additionalProperties>
        <!-- 其余原有配置保持不变 -->
    </configuration>
</plugin>

重新执行代码生成,插件会自动为POJO添加Jackson XML相关注解。

2. 补全OpenAPI XML字段配置(适配旧版本插件映射缺陷)

如果开启XML注解生成后仍未正确生成未包裹数组的对应注解,可以显式指定数组和元素的XML节点名:

KYCInfo:
  type: array
  xml:
    wrapped: false
    name: KYCInfo
  items:
    type: object
    xml:
      name: KYCInfo
    required:
      - KYCName
      - KYCValue
    properties:
      KYCName:
        type: string
      KYCValue:
        type: string

3. 确认XML解析依赖引入

Spring Boot项目需要引入Jackson XML解析模块:

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

4. 校验请求头

调用接口时需携带请求头Content-Type: application/xml,确保Spring使用XML消息转换器处理请求内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:36:03