Вызов конечной точки отдыха с помощью RestTemplate и класса данных Kotlin - PullRequest
0 голосов
/ 18 марта 2019

пытается вызвать конечную точку отдыха, которая возвращает простой JSON, но я все время терплю неудачу.

Результат выглядит так:

{
  "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 голосов
/ 19 марта 2019

Поскольку ваш ответ API начинается с {, это объект JSON.Но вы пытаетесь преобразовать его в список в результате исключения.

Сначала проанализируйте его как объект JSON, а затем получите список из его результата.

...