【问题标题】:Parameter does not have a match; SimpleXML参数不匹配;简单XML
【发布时间】:2017-08-17 17:32:30
【问题描述】:

我正在使用 retrofitSimpleXMLConverterFactory

我总是得到一个

ConstructorException: Parameter 'success' does not have a match in class ResponseInfo

而且我不知道可能出了什么问题。 xml 非常简单,我只想要来自success 节点的字符串。

xml:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <success>LoremIpsum</success>
</response>

响应信息:

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

编辑 1:我测试了 Api 调用,它返回给定的 xml。

谢谢

【问题讨论】:

    标签: kotlin retrofit2


    【解决方案1】:

    所以最后,我自己解决了这个问题。

    问题出在ResponseInfo 类。在我把它改成

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

    一切正常。

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

    【讨论】:

    • 大写元素。
    【解决方案2】:

    如果您想避免使用默认构造函数,则必须同时使用 fieldparam use-site targets。它看起来像这样:

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

    正如this comment 中所述,似乎没有任何方法可以组合这两个使用站点目标。

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      相关资源
      最近更新 更多