Проблема с использованием объекта JSON в сервлете

Это то, что я пытаюсь сделать, и это довольно просто, но я застреваю: я пытаюсь отправить объект JSON, сформированный в JSP, на сервлет на стороне сервера и проанализировать его.

Что я сделал до сих пор:

  • Сконструировал json.
  • отправка json на сервер
$.ajax({
            data: jsontosend,
            url: 'MYSERVLET?name=asdf',
            success: function(res){
                alert('posted');
            }
        })

Проблема:

  • На какое имя ссылается этот JSON, чтобы я мог получить его в сервлете с помощью request.getParameter()?
  • Когда я печатаю request.getParameterNames() , я получаю имя параметра в виде самой строки JSON, поэтому вывод всех имен параметров внутри MYSERVLET выглядит следующим образом
Parameter = name
Parameter = {"ticker":"asd","date":"asd","bucket":"300","entry":[{"type":"asd","indicator":"asd","condition":"asd"}],"exit":[{"type":"qwe","indicator":"qwe","condition":"qwe"}]}

У кого-нибудь есть идеи, в чем проблема?

Также я попытался посмотреть на этот вопрос здесь, в stackoverflow, но там тоже существует та же проблема. Также есть повторяющийся вопрос, который не был дан ответ.

Помощь! :(


person Shrayas    schedule 08.09.2011    source источник
comment
Вы использовали что-то вроде LiveHeaders Firefox, чтобы увидеть, что отправляется? Вы сможете увидеть все пары ключ-значение, отправляемые сервлету-отправителю.   -  person El Guapo    schedule 08.09.2011


Ответы (2)


Прочтите http://api.jquery.com/jQuery.ajax/#sending-data-to-server:

Параметр данных может содержать либо строку запроса вида ключ1=значение1&ключ2=значение2, либо карту вида {ключ1: 'значение1', ключ2: 'значение2'}. Если используется последняя форма, данные перед отправкой преобразуются в строку запроса с помощью jQuery.param().

Итак, вы должны использовать

$.ajax({
        data: {theNameOfTheParameter : jsontosend,
               name : 'asdf'},
        url: 'MYSERVLET',
        success: function(res){
            alert('posted');
        }
    })

и используйте request.getParameter("theNameOfTheParameter"), чтобы получить строку JSON.

person JB Nizet    schedule 08.09.2011
comment
ПОТРЯСАЮЩИЙ СОУС. СПАСИБО ОГРОМНОЕ ЧЕЛОВЕКУ! :D - person Shrayas; 08.09.2011

Вы не получаете объект json в своем сервлете. JQuery преобразует его в параметры http, подобные тому, что вы получаете из формы. Пример: ?ticker=asd&bucket=300

Итак, чтобы ответить на ваш вопрос. Единого имени нет. Возраженный json разбивается на несколько имен.

РЕДАКТИРОВАТЬ: попробуйте добавить тип: 'post'

По вашему запросу. Вы также можете добавить processData: false, и в этом случае JQuery будет отправлять параметры json, а не http. В любом случае, я действительно рекомендую использовать http-отладчик, такой как fiddler, который сделает его видимым, что отправляется туда и обратно.

person Esben Skov Pedersen    schedule 08.09.2011
comment
Я только что попробовал это, выполнив System.out.println(request.getParameter("ticker"));, и я получил null :( - person Shrayas; 08.09.2011
comment
@shreyas: ты нашел решение ?? пожалуйста, поделитесь, если вы сделали. - person streak; 07.10.2013