我正在解组一个类型为
的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