Разбор списка объектов, полученных из API - PullRequest
0 голосов
/ 26 апреля 2020

Привет, я использую модификацию для вызова моего API с пружинной загрузкой.

Ответ API

    [
         {
             "name": "whishky",
             "price": 1000
         },
         {
             "name": "vodka",
             "price": 200
         }
    ]

Мой класс pojo выглядит как

public class MyResponse {
    List<MyObject> resp;
}

И класс MyObject выглядит как

public class MyObject implements Serializable {

    @JsonProperty("name")
    private String name;

    @JsonProperty("price")
    private Double price;
}

вызов API

Call<MyResponse> saveRequestCall = MyApi.fetchData(request);
Response<MyResponse> execute = saveRequestCall.execute();

Теперь проблема заключается в том, что при вызове API я получаю исключение

2020-04-25 18:08:18,895 ERROR c.s.e.b.XYZServiceImpl Error in fetching datawith exception com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `zzz.MyResponse` out of START_ARRAY token
 at [Source: (InputStreamReader); line: 1, column: 1]

Любая помощь будет оценена относительно того, как я могу разобрать это.

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Вышеуказанные json представляют JSONArray из JSONObject с двумя свойствами name и price, поэтому вам не нужно переносить List<MyObject> resp в другой класс, вы можете напрямую десериализовать json в List<MyObject>

Call<List<MyObject>> saveRequestCall = MyApi.fetchData(request);
Response<List<MyObject>> execute = saveRequestCall.execute();
0 голосов
/ 26 апреля 2020

Кажется, проблема связана с MyResponse, потому что она ожидает что-то вроде

{
  "resp": [
    {
       "name": "whishky",
       "price": 1000
    },
    ...
  ]
}

Это должно быть исправлено, если вы используете

Call<List<MyObject>> saveRequestCall = MyApi.fetchData(request);
Response<List<MyObject>> execute = saveRequestCall.execute();
...