Получить данные, отправленные в формате JSON из JavaScript, внутри сервлета - PullRequest
4 голосов
/ 04 февраля 2011

У меня есть запрос на получение данных, отправленных в виде JSON из JavaScript, внутри сервлета Java.Вот что я делаю ...

Эта часть кода в JavaScript делает запрос к сервлету

type : "POST",
url: 'getInitialData',
datatype: 'json',
data : ({items :[{ name: "John", time: "2pm" },{name: "Sam", time: "1pm" }]}),
success: function(data) {
    try{
          ////Code to be handeled where response is recieved
       }catch(e){
        alert(e);
    }
}

При выполнении этого запроса я пытаюсь получить параметры, отправленныеиз JavaScript в сервлете, но при этом меня сначала смутило, как извлечь данные из запроса

В своем сервлете я использовал следующее:

ПРИМЕЧАНИЕ: Тип контента в моем сервлете установлен на: apllication / json

 response.setContentType("application/json");

 request.getParameterMap();

выше приведены данные, приведенные ниже, но я не смог понять, как работать и получитьфактические данные

{items[1][name]=[Ljava.lang.String;@1930089, items[0][time]=[Ljava.lang.String;@860ba, items[1][time]=[Ljava.lang.String;@664ca, items[0][name]=[Ljava.lang.String;@1c334de}

, в то время как следующий код дал мне исключение null, которое ожидалось.

request.getParametervalues("items");

Среди других я пробовал где request.getParameter ();request.getParameterNames ();но напрасно ...

Я не в том направлении?Пожалуйста, ведите меня!Пожалуйста, дайте мне знать, как восстановить это значение.

Спасибо за чтение этого длинного поста ...

Sangeet

1 Ответ

3 голосов
/ 04 февраля 2011

Карта параметров запроса представляет собой Map<String, String[]>, где ключ карты - это имя параметра, а значение карты - это значения параметров - HTTTP допускает более одного значения для одного имени.

Учитывая распечатку вашей карты, должно работать следующее:

String item0Name = request.getParameter("items[0][name]");
String item0Time = request.getParameter("items[0][time]");
String item1Name = request.getParameter("items[1][name]");
String item1Time = request.getParameter("items[1][time]");

Если вы хотите немного больше динамики, используйте следующее:

for (int i = 0; i < Integer.MAX_VALUE; i++) {
    String itemName = request.getParameter("items[" + i + "][name]");
    String itemTime = request.getParameter("items[" + i + "][time]");

    if (itemName == null) {
        break;
    }

    // Collect name and time in some bean and add to list yourself.
}

Обратите внимание, что установка типа содержимого response не имеет значения для сбора параметров request .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...