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 ) @XmlRootElement(name = "object") @JsonIgnoreProperties(ignoreUnknown = true) data class Object( @JacksonXmlProperty(isAttribute = true) val pk: String, @JacksonXmlProperty(isAttribute = true) val model: String, @JsonProperty(value = "field") @JacksonXmlElementWrapper(useWrapping = false) val fields: List ) 

回答你的问题:你可以通过使用isAttribute属性来处理属性。 可以使用JacksonXmlElementWrapper + JsonProperty来处理列表(不要被名字愚弄,它用于处理名字中的复数forms,从而使它们在XML中更具人性化)。

为了能够使用数据类,您需要使用registerKotlinModule注册Kotlin模块 :

 val text = """  1000000714 DL   11 Jul, 2017, 17:40    """ 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"}}}])])