Получите параметры POST только (Java)

Я не использовал его, но Вы могли бы хотеть попробовать плагин jQuery, записанный Mark Gibson

, Это добавляет две функции: $.toJSON(value), $.parseJSON(json_str, [safe]).

12
задан dankuck 29 July 2009 в 21:17
поделиться

5 ответов

Думаю, один из способов - вручную проанализировать HttpServletRequest.getQueryString () и проверить, что в нем нет параметра.

Наивная реализация (игнорирование URL-адреса -экранированные ключевые значения) будет выглядеть примерно так (непроверено):

public boolean isInQuery(HttpServletRequest request, String key) {
  String query = request.getQueryString();
  String[] nameValuePairs = query.split("&");
  for(String nameValuePair: nameValuePairs) {
    if(nameValuePair.startsWith(key + "=")) {
      return true;
    }
  }
  return false;
}
6
ответ дан 2 December 2019 в 18:20
поделиться

Насколько я понимаю, в HTTP нет таких вещей, как параметры POST и параметры GET, есть методы POST и GET. Когда запрос выполняется с использованием метода POST, параметры входят в тело сообщения. В случае запроса GET параметры передаются в URL.

Моя первая мысль заключалась в том, что это ошибка реализации в вашем контейнере сервлета. Но, поскольку все не всегда так, как вы ожидаете, спецификация сервлета Java (по крайней мере, версия 2.4) не делает различий между двумя типами параметров. Таким образом, невозможно получить параметры сообщения или URL-адреса с помощью API сервлета.

Несомненно, у вас уже есть план Б. Но на всякий случай я публикую две альтернативы, которые мне пришли в голову:

  1. Если у вас есть доступ к определению имени параметра, вы можете использовать префикс, чтобы различать их при повторении результата getParameterNames ().

  2. Вы можете проанализировать URL, создав объект URL и используя метод getQuery (), чтобы получить только параметры. Затем проанализируйте параметры в строке запроса с помощью некоторого служебного класса, такого как ParameterParser в библиотеке HttpClient . И, наконец, вычтите эти имена из результата getParameterNames ().

7
ответ дан 2 December 2019 в 18:20
поделиться

Не могли бы вы просто получить параметры из HttpServletRequest в doPost или doGet в подклассе HttpServlet ?

Все, что вы захватываете (через getParemeter ) внутри doPost, является POST, а все, что внутри doGet - GET.

3
ответ дан 2 December 2019 в 18:20
поделиться

Я не уверен, что это сработает, но вы можете попробовать извлечь необработанное содержимое тела POST с помощью request.getReader () . Однако контейнер может удалить эти данные перед передачей управления вашему приложению, и даже если этого не произошло, вам придется декодировать строку параметров самостоятельно.

1
ответ дан 2 December 2019 в 18:20
поделиться

Я думаю, вы могли бы что-то сделать с помощью getMethod (), доступного из интерфейса HttpServletRequest.

Java doc 1.6

Это также доступно в 1.4 и 1.5.

2
ответ дан 2 December 2019 в 18:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: