Исправление на стороне сервера для получения строки, содержащей '&' (амперсанд) - PullRequest
0 голосов
/ 07 марта 2012

Мы уже отправили клиентское приложение (.NET WinForms), которое отправляет данные клиента на сервер Java. Хотя большая часть данных, отправляемых клиентом, принимается на стороне сервера, некоторые записи усекаются из-за присутствия в нем символа &, так как клиент отправляет необработанный & и не кодирует его URL-адресом, мы исправили его с помощью следующий код:

string dataBefore="A & B";
string dataBefore = System.Web.HttpUtility.UrlEncode(dataBefore);

Мы не можем обновить все клиентские приложения (которые уже поставлены), и мы думаем над исправлением на стороне сервера.

С помощью Fiddler мы убедились, что данные покинули клиента полностью, но когда сервер читает, как показано ниже:

//in java
String dataReceied=request.getParameter("data");

усекается, если данные содержат &

Может ли кто-нибудь помочь нам предложить исправление на стороне сервера (java) для этого? Можно ли получить доступ к потоку запросов в Java (вместо request.getParameter())?

Ответы [ 2 ]

0 голосов
/ 07 марта 2012

Вы можете получить доступ к необработанной строке запроса, используя HttpServletRequest.getQueryString() ( javadoc ), который:

возвращает String, содержащий строку запроса, или ноль, еслиURL не содержит строку запроса. Значение не декодируется контейнером. .

Вы можете выполнить ручное декодирование этой строки вместо использования getParameter().

@ идея Уэсли.использование getParameterMap() может оказаться бесполезным, поскольку вы не знаете, в каком порядке были предоставлены параметры.

Я бы предложил использовать эту логику в качестве фильтра сервлета, чтобы отделить исправление нарушенных параметров.из вашей реальной логики сервлета.Это потребует написания пользовательского подкласса HttpServletRequestWrapper, который переопределяет getParameter() и вручную декодирует строку запроса.После этого ваш сервлет сможет использовать API HttpServletrequest, как будто все было в порядке.

0 голосов
/ 07 марта 2012

Он обрезан, потому что & означает новый параметр URL в запросе, подобный этому: google.com?query=java&page=2. Java преобразует все эти параметры в карту, так что здесь все идет не так.

Вы пробовали перебирать request.getParameterMap ()? Остальные данные, скорее всего, указаны в названии следующего параметра. Если это не помогает, проверьте API HTTPServletRequest, чтобы узнать, есть ли другой способ получить ваши данные.

Удачи!

PS Как вы, ребята, сердитесь на стажера, который написал и отправил этого клиента? Это звучит испорчено!

...