В сервлетах Java вы читаете JSON из запроса POST, например, через
new JSONObject(toString(httpRequest.getInputStream()))
Теперь, помимо JSON, я хотел бы указать параметры в URL-адресе, их можно прочитать через:
httpRequest.getParameterMap().get("someURLParam")
Все работает (я использую почтовые запросы AJAX и причал для сервера)
НО
Я обеспокоен и смущен, если и когда эти два метода влияют друг на друга как javadocs из javax.servlet.ServletRequest.getParamter(String)
говорит:
Если данные параметров были отправлены в тело запроса, например, с запросом HTTP POST, то чтение тела напрямую через ServletRequest.getInputStream или ServletRequest.getReader может помешать выполнению этого метода.
Что это значит в моем случае? Или они только мешают, если тип контента x-www-form-urlencoded
? Или только при использовании getParameter
и метода getParameterMap
в порядке?
Если вы используете только getParameter/getParameterMap, вы будете в порядке. Это потому, что за кулисами эти методы могут вызвать getInputStream. Спецификация говорит МАЙ, потому что это до реализации, поэтому поведение может варьироваться от одного контейнера к другому.
Если ваш контент не закодирован в форме или вы обрабатываете запрос GET и т.д., GetParameter/getParameterMap нужно только получить параметры из строки запроса, поэтому имеет смысл, что Jetty не будет читать тело в этих случаях.