HttpServletRequest получает JSON POST data [дубликат]
Я ОТПРАВЛЯЮ HTTP-СООБЩЕНИЕ по URL http://laptop:8080/apollo/services/rpc?cmd=execute
с данными POST
{"jsondata":"data"}
Http-запрос имеет Content-Тип application/json; charset=UTF-8
Как мне получить данные POST (jsondata) из HttpServletRequest?
Если я перечислю параметры запроса, я смогу увидеть только один параметр, который является "cmd", а не данные POST.
Переведено автоматически
Ответ 1
Обычно вы можете ПОЛУЧАТЬ и публиковать параметры в сервлете одним и тем же способом:
request.getParameter("cmd");
Но только если данные POST закодированы как пары ключ-значение типа контента: "application / x-www-form-urlencoded", как при использовании стандартной HTML-формы.
Если вы используете другую схему кодирования для своих post-данных, как в вашем случае, когда вы публикуете поток данных json, вам необходимо использовать пользовательский декодер, который может обрабатывать необработанный поток данных из:
BufferedReaderreader= request.getReader();
Пример постобработки Json (использует пакет org.json )
// Work with the data using methods like... // int someInt = jsonObject.getInt("intParamName"); // String someString = jsonObject.getString("stringParamName"); // JSONObject nestedObj = jsonObject.getJSONObject("nestedObjName"); // JSONArray arr = jsonObject.getJSONArray("arrayParamName"); // etc... }
Ответ 2
Вы отправляете данные из другого источника (значит, другой порт или имя хоста)? Если да, то эта совсем недавняя тема, на которую я только что ответил, может быть полезной.
Проблема заключалась в междоменной политике XHR и полезном совете о том, как ее обойти с помощью метода, называемого JSONP. Большим недостатком является то, что JSONP не поддерживает POST-запросы.
Я знаю, что в исходном сообщении нет упоминания о JavaScript, однако JSON обычно используется для JavaScript, поэтому я пришел к такому выводу