使用RestTemplate和Kotlin数据类调用Rest端点

时间:2019-03-18 19:02:56

标签: spring-boot kotlin resttemplate

试图调用一个返回简单json的rest端点,但是我一直失败。

结果如下:

{
  "Products": [
    {
      "Name": "ABC",
      "Guid": "4711"
    },
    {
      "Name": "DEF",
      "Guid": "9876"
    },
    {
      "Name": "HGT",
      "Guid": "159"
    }
  ]
}

我的代码如下:

override fun getProductMetaList(): List<BestProductMetaInfo> {
    val url = "https://$baseUrl/api/meta"
    return this.getForObject(url, GetProductMetaListResult::class.java)?.Products ?: emptyList()
}

...

@JsonIgnoreProperties(ignoreUnknown = true)
data class GetProductMetaListResult(
        @JsonProperty("Products")
        var Products: List<ProductMetaInfo> = emptyList()
)

@JsonIgnoreProperties(ignoreUnknown = true)
data class ProductMetaInfo(
        @JsonProperty("Guid")
        var Guid: String = "",
        @JsonProperty("Name")
        var Name: String = ""
)

结果总是:

  

嵌套的例外是   com.fasterxml.jackson.databind.exc.MismatchedInputException:无法   构造的实例   GetProductMetaListResult   (尽管至少存在一个创建者):没有字符串参数   从字符串值反序列化的构造函数/工厂方法

我尝试使用默认值和可为空的值,但所有结果都相同。

1 个答案:

答案 0 :(得分:0)

当您的API响应以{开始时,这是一个JSON对象。但是您正在尝试将其转换为List,结果发生了异常。

首先将其解析为JSON对象,然后从其结果中获取列表。