参数没有匹配项; SimpleXML的

lam*_*pen 6 kotlin retrofit2

我使用retrofitSimpleXMLConverterFactory.

我总是得到一个

ConstructorException: Parameter 'success' does not have a match in class ResponseInfo
Run Code Online (Sandbox Code Playgroud)

我不知道会出现什么问题.xml非常简单,我只想要success节点中的字符串.

XML:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <success>LoremIpsum</success>
</response>
Run Code Online (Sandbox Code Playgroud)

ResponseInfo:

@Root(strict = false, name = "response")
data class ResponseInfo(@Element(required = false, name = "success) var success: String)
Run Code Online (Sandbox Code Playgroud)

编辑1:我测试了Api调用并返回给定的xml.

谢谢

lam*_*pen 11

最后,我成功解决了这个问题.

问题是ResponseInfo班级.我改成之后

@Root(strict = false, name="response)
data class ResponseInfo @JvmOverloads constructor(
  @field:element(name = "success") var success: String = ""
)
Run Code Online (Sandbox Code Playgroud)

一切都很好.

你需要一个空构造函数,所有属性必须是mutable(var),你必须field:@Element-Annotation 前面追加.@JvmOverloads结合默认值将为您创建空构造函数以及所有其他构造函数变体.

  • 大写元素。 (2认同)

Ani*_*gif 5

如果要避免使用笨拙的构造函数,则必须同时使用fieldparam use-site target。它看起来像这样:

@Root(strict = false, name = "response")
data class ResponseInfo(
    @field:Element(name = "success") @param:Element(name = "success") var success: String
)
Run Code Online (Sandbox Code Playgroud)

评论中所述,似乎没有任何方法可以将两个使用场所目标结合起来。