@XmlElement名称注释在将xml解组为kotlin数据类时被忽略



我正在解组一个类型为

的xml文件
<employee>
<first_name>Jane</first_name>
<surname>Doe</surname>
</employee>

将放入类型为

的kotlin数据类中
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 = ["first_name", "surname"])
@XmlAccessorType(XmlAccessType.FIELD)
data class EmployeeData(
@XmlElement(name = "first_name") val firstName: String? = null,
@XmlElement val surname: String? = null,
)

使用以下解组器:

import jakarta.xml.bind.JAXBContext
import java.io.InputStream
val context = JAXBContext.newInstance(EmployeeData::class.java)
val unmarshaller = context.createUnmarshaller()
val data = unmarshaller.unmarshal(xmlContents) as EmployeeData

surname字段被正确地赋值为"Doe",然而firstName字段得到的值为null,就好像忽略了@XmlElement注释的name参数。

使用的库如下:

implementation("jakarta.xml.bind:jakarta.xml.bind-api:3.0.1")
implementation("com.sun.xml.bind:jaxb-impl:3.0.2")

有人知道为什么会发生这种情况以及如何解决吗?谢谢!

使用data类,您需要显式指定注释应用于getter,否则它将使用变量名(这就是为什么它不声明@field:而适用于姓氏)。因为你声明你正在使用字段访问器,

@field:XmlElement(name = "first_name") firstName: String? = null

而不是

最新更新