Java kotlin中此XML响应的POJO对象

Java kotlin中此XML响应的POJO对象,java,xml,jackson,kotlin,Java,Xml,Jackson,Kotlin,我正在使用一个API,它返回XML,如下所示: <xyz-objects version="1.0"> <object pk="1" model="roll"> <field type="BigIntegerField" name="roll_number">1000000714</field> <field type="CharField" name="status">DL</field&

我正在使用一个API,它返回XML,如下所示:

<xyz-objects version="1.0">
    <object pk="1" model="roll">
        <field type="BigIntegerField" name="roll_number">1000000714</field>
        <field type="CharField" name="status">DL</field>
        <field name="scans">
            <object pk="1" model="scan_stages">
                <field type="DateTimeField" name="updated_on">11 Jul, 2017, 17:40</field>
            </object>
        </field>        
    </object>
</xyz-objects>

1000000714
DL
2017年7月11日17:40
我正在使用Jackson的XML映射器

我尝试为此编写一个POJO对象,但没有成功

如何处理元素的属性,如类型和名称?
你能举例说明吗?

因为你没有提供模式,所以很难猜测模型的某些部分。特别是,很难猜测
字段
模型。因此,我将把它反序列化为一个动态对象,它可以处理任何事情。以防你有一些额外的字段,这里没有提到

首先,创建一些数据类:

@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<Object>
)

@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<JsonNode>
)
它将打印:

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"}}}])])

根据我在这里做的调查,这里有一个比


“我试着写……”很好!代码的相关部分?任何错误(具体是什么错误)?首先:您的XML无效:)
xyz对象
ecomexpress对象
关闭。您还缺少
扫描的
。显然是输入错误。@madhead完成了..现在请回答此返回“参数#0没有属性名称注释;当多参数构造函数注释为Creator时必须有名称”,然后我将localName属性添加到元素中,然后返回:“指定为非null的参数为null:参数pk”这只是一个示例。如果不知道您的完整模式,我无法预测确切的类型。在这里,请参阅:“指定为非null的参数为null:Parameter pk”在某些情况下,我不希望
pk
为null,因为您的所有示例都有它。对于这种特殊情况,请使用可空类型:
val pk:String?
我使用了与本问题相同的XML不,您没有。在该XML中,所有
对象
都具有非空的
pk
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"}}}])])
data class Field(
    @JacksonXmlProperty(isAttribute = true)
    val type: String,

    @JacksonXmlProperty(isAttribute = true)
    val name: String,
) {
    @JacksonXmlText
    lateinit var value: String private set
}