今天,我陷入了一个问题。我需要获取此xml视图:
<promotion>
<i ... />
</promotion>
<promotion_banner>
<i ... />
</promotion_banner>
<promotion_whats_new>
<i ... />
<i ... />
<i ... />
<i ... />
<i ... />
</promotion_whats_new>
实施:
@JacksonXmlRootElement
class Response {
@JacksonXmlProperty(isAttribute = true)
var notAuthenticated: Boolean = false
@get:[JacksonXmlProperty(localName = "i")
JacksonXmlElementWrapper(localName = "promotion")]
var promotionItems: MutableList<I> = mutableListOf()
@get:[JacksonXmlProperty(localName = "i")
JacksonXmlElementWrapper(localName = "promotion_banner")]
var promotionBannerItems: MutableList<I> = mutableListOf()
@get:[JacksonXmlProperty(localName = "i")
JacksonXmlElementWrapper(localName = "promotion_whats_new")]
var promotionWhatsNewItems: MutableList<I> = mutableListOf()
@get:[JacksonXmlProperty(localName = "i")
JacksonXmlElementWrapper(localName = "preloader")]
var preloaderItems: MutableList<I> = mutableListOf()
override fun toString(): String {
return "Response(notAuthenticated=$notAuthenticated, promotionItems=$promotionItems, promotionBannerItems=$promotionBannerItems, promotionWhatsNewItems=$promotionWhatsNewItems, preloaderItems=$preloaderItems)"
}
}
错误:
com.fasterxml.jackson.databind.JsonMappingException: Conflicting getter definitions for property "i": Response#getPromotionItems(0 params) vs Response#getPromotionBannerItems(0 params)
是错误还是我做错了?
当然,我可以实现它以提供新的类(例如Promotion),但是也许有更好的解决方案。
答案 0 :(得分:0)
您要使用同一类中的不同Java类成员重新定义元素'i'。
为不同的实体提供不同的名称绝对是一种更好的方法。
XML元素不仅是标签。这是一个具有属性和嵌套元素(复杂结构)的对象。最好用不同的标签定义不同的对象。
对于您而言,以下结构看起来会更好:
<promotions>
<promotion ... />
</promotions>
<banners>
<banner ... />
</banners>
<whatsnews>
<whatsnew ... />
<whatsnew ... />
<whatsnew ... />
<whatsnew ... />
</whatsnews>
包装器元素是可选的。无需包装元素即可编写相同的XML。在原始XML中是不可能的:
<promotion ... />
<banner ... />
<whatsnew ... />
<whatsnew ... />
<whatsnew ... />