我想从API中获取
XML数据,并使用Kotlin中的Retrofit2 SimpleXML将其映射到Kotlin模型对象.
但是,我从SimpleXML得到如下错误消息.
org.simpleframework.xml.core.MethodException: Annotation @org.simpleframework.xml.Element(data=false,name=,required=true,type=void) must mark a set or get method
这是获取的XML数据
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <response> <result code="0">Success</result> <token>XXXXXXXXXXXXXXXXXXXX</token> <uid>4294967295</uid> </response>
Kotlin模型对象如下
@Root(name = "response") public class User() { @Element public var result: String? = null @Element public var token: String? = null @Element public var uid: String? = null }
apiclient如下.
interface MyService { @GET("/testLogin.xml") fun getUser(): Call<User> } val retrofit = Retrofit.Builder() .baseUrl(baseURL) .addConverterFactory(SimpleXmlConverterFactory.create()) .build() val call = retrofit.create(MyService::class.java).getUser() call.enqueue(object: Callback<User> { override fun onResponse(p0: Call<User>?,response: Response<User>?) { val response = response?.body() } override fun onFailure(p0: Call<User>?,t: Throwable?) { Log.e("apiclient",t?.message) }
我得到HTTP状态码200和正确的XML数据.所以我认为我的模型对象的声明是问题.
解决方法
这是同样的问题:
kotlin data class + bean validation jsr 303
您需要使用Annotation use-site targets,因为属性上的注释的默认值优先级为:
>参数(如果在构造函数中声明)
>属性(如果目标站点允许,但只有Kotlin创建的注释可以做到这一点)
>字段(可能在这里发生了什么,这不是你想要的).
使用get或set target将注释放在getter或setter上.这里是吸气剂:
@Root(name = "response") public class User() { @get:Element public var result: String? = null @get:Element public var token: String? = null @get:Element public var uid: String? = null }
原文地址:https://www.jb51.cc/android/313404.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。