POJO在kotlin中响应这个XML响应
我正在处理一个API,它返回XML如下所示:
1000000714 DL 11 Jul, 2017, 17:40
我正在使用jackson的XML映射器。
我试图为此写一个POJO对象,但这是行不通的。
如何处理types和名称等元素的属性? 你能举例说明吗?
由于您没有提供模式,所以很难猜测模型的某些部分。 特别是很难猜测field
模型。 所以我将把它反序列化成一个JsonNode
,这个动态对象可以处理所有的事情。 JsonIgnoreProperties
,以防万一你有一些额外的领域,这里没有提到。
首先,创建一些数据类:
@XmlRootElement(name = "xyz-objects") @JsonIgnoreProperties(ignoreUnknown = true) data class XyzObjects( @JacksonXmlProperty(isAttribute = true) val version: String, @JsonProperty(value = "object") @JacksonXmlElementWrapper(useWrapping = false) val objects: List
回答你的问题:你可以通过使用isAttribute
属性来处理属性。 可以使用JacksonXmlElementWrapper
+ JsonProperty
来处理列表(不要被名字愚弄,它用于处理名字中的复数forms,从而使它们在XML中更具人性化)。
为了能够使用数据类,您需要使用registerKotlinModule注册Kotlin模块 :
val text = """ """ val mapper = XmlMapper().registerKotlinModule() val node = mapper.readValue(text) println(node)
它将打印:
XyzObjects(version=1.0, objects=[Object(pk=1, model=roll, fields=[{"type":"BigIntegerField","name":"roll_number","":"1000000714"}, {"type":"CharField","name":"status","":"DL"}, {"name":"scans","object":{"pk":"1","model":"scan_stages","field":{"type":"DateTimeField","name":"updated_on","":"11 Jul, 2017, 17:40"}}}])])