Получение данных JSON для таблицы на странице JSTL - PullRequest
0 голосов
/ 14 марта 2019

Итак, я использую amiibo api для извлечения данных и отображения того, что возвращается в таблице. Сейчас я просто помещаю серию в таблицу, чтобы убедиться, что она работает, но это не так!

Вот мой стол:

<table class="table table-striped table-hover table-sm">
            <thead>
                <tr>
                    <th class="col-sm-1" scope="col">#</th>
                    <th class="col-sm-11" scope="col">Amiibo</th>
                </tr>
            </thead>
            <c:forEach var="amiibo" items="${amiibos}" varStatus="status">
                <tr>
                    <th scope="row">${status.count}</th>
                    <td>${amiibo.amiiboSeries}</td>
                </tr>
            </c:forEach> 
        </table>

А вот мой сервлет, который извлекает данные API и помещает их в список:

String json = callAmiiboApi(input.getAmiibo());

        // Check for valid json format.  If false, String contains an error message.
        if (json.startsWith("{") || json.startsWith("[")) {
            Gson gson = new Gson();
            ArrayList<Amiibo> amiibos = gson.fromJson(json, new TypeToken<ArrayList<Amiibo>>(){}.getType());

            //get list of elements 
            if (!amiibos.isEmpty() && amiibos.size() > 0) {
                request.setAttribute("amiibos", amiibos);
            }  
        }

Вот мой объект:

public class Amiibo implements Serializable
{
    public String amiiboSeries;
    public String character;
    public String gameSeries;
    public String head;
    public String image;
    public String name;
    public String[] release;
    public String tail;
    public String type;

    public Amiibo()
    {
        amiiboSeries = "";
        character = "";
        gameSeries = "";
        head = "";
        image = "";
        name = "";
        release = new String[0];
        tail = "";
        type = "";
    }

    public String getAmiiboSeries()
    {
        return amiiboSeries;
    }

Это ошибка, которую я получаю:

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

Кто-нибудь знает, что я делаю неправильно при извлечении этих данных? Я думаю, что API-интерфейс доступен нормально, я считаю, что моя проблема в том, как я его отображаю (возможно, когда я помещаю его в список?).

- редактировать -

Это мой класс ввода для получения пользовательского ввода

import java.io.Serializable;

public class Input implements Serializable {
    private String amiibo;

    public Input() {
        this("");
    }

    public Input(String amiibo) {
        this.amiibo = amiibo;
    }

    public String getAmiibo() {
        return amiibo;
    }

    public void setAmiibo(String amiibo) {
        this.amiibo = amiibo;
    }  
}

1 Ответ

1 голос
/ 14 марта 2019

Создать объект-обертку:

class AmiiboResponse {

    private List<Amiibo> amiibo;

    public List<Amiibo> getAmiibo() {
        return amiibo;
    }

    public void setAmiibo(List<Amiibo> amiibo) {
        this.amiibo = amiibo;
    }
}

и десериализовать таким образом:

List<Amiibo> amiibos = gson.fromJson(json, AmiiboResponse.class).getAmiibo();
...