SimpleXML Converter解析XML触发PersistenceException构造器不匹配如何解决
SimpleXML Constructor匹配异常解决方法
报错信息
org.simpleframework.xml.core.PersistenceException: Constructor not matched for class com.example.nbrbcurrency.retrofit.models.Food
问题定位
- Kotlin数据类搭配
@JvmOverloads注解时,只有给所有构造参数设置默认值,才会生成无参构造方法。你当前的Food、BreakFastMenu类都没有给参数设置默认值,SimpleXML框架无法找到可调用的无参构造方法实例化类对象,因此抛出匹配异常。 - 集合字段的
@ElementList注解缺少entry参数,无法明确和XML中的food子节点做对应,也会增加解析匹配失败的概率。
修复代码
修改BreakFastMenu类
import org.simpleframework.xml.ElementList import org.simpleframework.xml.Root @Root(strict = false, name = "breakfast_menu") data class BreakFastMenu @JvmOverloads constructor( @field:ElementList(inline = true, entry = "food") var foodList : List<Food> = emptyList() )
修改Food类
import org.simpleframework.xml.Element import org.simpleframework.xml.Root @Root(name = "food", strict = false) data class Food @JvmOverloads constructor( @field:Element(name = "name") var name: String = "", @field:Element(name = "price") var price: String = "", @field:Element(name = "description") var description: String = "", @field:Element(name = "calories") var calories: String = "" )
可选校验项
- 确认Retrofit初始化时已正确注入SimpleXMLConverter工厂
- 如果XML结构存在非必填字段,给对应字段的
@Element注解添加required = false参数
内容的提问来源于stack exchange,提问作者MihaelKrau
相关产品推荐
相关产品推荐

