我需要解析 Retrofit 返回的 XML:
<data>
<id>1</id>
<subdata>
<id>1a</id>
</subdata>
<subdata>
<id>1b</id>
</subdata>
</data>
我正在使用杰克逊:
Retrofit.Builder()
.baseUrl("https://www.web.com/")
.addConverterFactory(JacksonConverterFactory.create(XmlMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerKotlinModule()))
.build().create(DataApiService::class.java)
我尝试使用这些数据类作为对象:
data class Data(
val id: String,
@JacksonXmlProperty(localName = "subdata")
val subdata1: SubData,
@JacksonXmlProperty(localName = "subdata")
val subdata2: SubData
)
data class SubData(
val id: String,
)
但它不起作用:
IllegalArgumentException: Conflicting getter definitions for property "subdata": com.data.model.Data#getSubdata1() vs com.data.model.Data#getSubdata2()
您可以使用注释
@JacksonXmlElementWrapper(useWrapping = false)
告诉 Jackson 您有多个具有相同名称的元素并将其反序列化为List<Subdata>
:useWrapping = false
告诉 Jackson 你的 XML 元素直接位于根之下,而不是位于单独的包装器之下。