将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"不属于类的属性名,运行时可能抛出属性不存在的异常。
解决方案
按以下两点修改数据类注解即可:
- 给构造参数中的注解添加
field:前缀,指定注解作用于类字段 - 将
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
相关产品推荐
相关产品推荐

