Правильный способ анализа объектов JSON, содержащих массивы, в сервлетах Java (например, с Gson)

Я знаю, что это тема, о которой много говорят, но я все еще не смог найти правильного и ясного ответа на мою конкретную проблему.

У меня есть JSON, который выглядит так:

var myData = {  "gameID" : gameID,
                "nrOfPlayers" : 2,
                "playerUIDs" : [123, 124]
            };

Вопрос, который у меня возник, заключается в том, какой именно способ (или лучший способ по стилю) проанализировать это в сервлете Java (например, с помощью GSON)? Сначала я отправляю этот JSON на сервер, используя метод jQuery ajax, например:

jQuery.ajax({
        url : path,
        data : myData,
        success : successFunction,
        error : function(data) {
            console.log("Error: ", data);
        }  ,
        type : "post",
        timeout : 30000
    });

Теперь в сервлете я узнал, что должен был проанализировать этот JSON следующим образом:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Gson gson = new Gson();

        String gameID = gson.fromJson(request.getParameter("gameID"), String.class);
        String nrOfPlayers = gson.fromJson(request.getParameter("nrOfPlayers"), String.class);
        String[] playerUIDs = gson.fromJson(request.getParameter("playerUIDs"), String[].class);

        log.info(gameID);
        log.info(nrOfPlayers);
        log.info(playerUIDs[0] +" "+ playerUIDs[1]);
}

Но переменная playerUIDs IS NULL и, конечно, playerUIDs [0] выдает исключение!

Копаясь глубже, я обнаружил, что при циклическом изменении имен параметров запроса он содержалпараметр с именем "playerUIDs []" сзначение всего 123 (первый int в массиве). Это было странно, потому что я, казалось, вообще не мог получить доступ к следующим значениям.

Затем я прочитал, что объекты JSON должны быть преобразованы в строку перед POST, поэтому я добавил JSON.stringify (myData), но теперь только имена параметров запросасодержится ОДНО имя это был сам объект JSON в строковом состоянии:

INFO: Parameter name = {"gameID":"b6a51aabb8364b04bce676eafde1bc87","nrOfPlayers":2,"playerUIDs":[123,124]}

Мне показалось, что единственный способ заставить это работать - создать внутренний класс:

class GameStart {
    protected String gameID;
    protected int nrOfPlayers;
    protected int[] playerUIDs;
}

И разбор JSON по имени параметра запроса, например так:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Gson gson = new Gson();
        Enumeration en = request.getParameterNames();
        GameStart start = null;
        while (en.hasMoreElements()) {
            start = gson.fromJson((String) en.nextElement(), GameStart.class);
        }
        log.info(start.gameID);
        log.info(String.valueOf(start.nrOfPlayers));
        log.info(start.playerUIDs[0] +" "+ start.playerUIDs[1]);
}

Теперь все значения есть, но это больше похоже на хак (чтение JSON из имени параметра запроса), чем на элегантное решение, поэтому я подумал, что я спрошу вас, ребята, что именно будет «правильным» способом сделать это? Я что-то упускаю из виду?

Заранее спасибо!

Ответы на вопрос(3)

Ваш ответ на вопрос