Preciso analisar este XML retornado pelo Retrofit:
<data>
<id>1</id>
<subdata>
<id>1a</id>
</subdata>
<subdata>
<id>1b</id>
</subdata>
</data>
Estou usando Jackson:
Retrofit.Builder()
.baseUrl("https://www.web.com/")
.addConverterFactory(JacksonConverterFactory.create(XmlMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerKotlinModule()))
.build().create(DataApiService::class.java)
Tentei com essas classes de dados para o objeto:
data class Data(
val id: String,
@JacksonXmlProperty(localName = "subdata")
val subdata1: SubData,
@JacksonXmlProperty(localName = "subdata")
val subdata2: SubData
)
data class SubData(
val id: String,
)
Mas não funciona:
IllegalArgumentException: Conflicting getter definitions for property "subdata": com.data.model.Data#getSubdata1() vs com.data.model.Data#getSubdata2()
Você pode usar a Anotação
@JacksonXmlElementWrapper(useWrapping = false)
para informar a Jackson que você tem vários elementos com o mesmo nome e desserializá-los comoList<Subdata>
:useWrapping = false
informa a Jackson que seus elementos XML estão diretamente abaixo da raiz e não abaixo de um Wrapper separado.