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

将XML反序列化为Kotlin数据类时@XmlElement的name注解被忽略如何解决

问题原因
  • 注解作用位置错误:Kotlin 主构造函数中声明属性时,直接添加的 @XmlElement 注解默认作用于构造方法参数,而你配置的 @XmlAccessorType(XmlAccessType.FIELD) 要求 JAXB 读取字段上的注解,因此你设置的 name = "first_name" 没有生效,JAXB 会默认按字段名 firstName 去匹配 XML 节点,找不到对应节点就返回 null。而 surname 字段名和 XML 节点名完全一致,所以可以正常匹配赋值。
  • propOrder 配置错误:@XmlType 的 propOrder 属性要求填写类中实际定义的属性名,而非 XML 节点名,你当前填写的 "first_name" 不属于类的属性名,运行时可能抛出属性不存在的异常。
解决方案

按以下两点修改数据类注解即可:

  1. 给构造参数中的注解添加 field: 前缀,指定注解作用于类字段
  2. 将 propOrder 中的值替换为类实际的属性名

修改后的完整数据类代码如下:

import jakarta.xml.bind.annotation.XmlAccessType
import jakarta.xml.bind.annotation.XmlAccessorType
import jakarta.xml.bind.annotation.XmlElement
import jakarta.xml.bind.annotation.XmlRootElement
import jakarta.xml.bind.annotation.XmlType

@XmlRootElement(name = "employee")
@XmlType(name = "", propOrder = ["firstName", "surname"])
@XmlAccessorType(XmlAccessType.FIELD)
data class EmployeeData(
  @field:XmlElement(name = "first_name") val firstName: String? = null,
  @field:XmlElement val surname: String? = null,
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:09