Строка запроса декодируется Spring Framework - PullRequest
9 голосов
/ 30 января 2012

У меня здесь странная проблема, но я не уверен, что это ошибка. Проект работает под Spring Framework.

Вид:

<form method="GET" action="someUrl.htm" enctype="application/x-www-form-urlencoded" >

    <label>Label</label>
    <input name="val1" value="${val1}" />
  ... 
      <!-- submit button here -->
</form>

Контроллер отображает на someUrl.htm, используя SimpleUrlHandlerMapping

<bean id="parameterMethodNameResolver"
        class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">    <property name="methodParamNames">
            ...
</bean>

<bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">    
        <property name="urlDecode" value="false" />
        <property name="mappings">
            <props>
                <prop key="**/someUrl.htm">someController</prop>
            </props>
        </property>
</bean>

Я хочу передать % как val1. Но когда я делаю это, следующий фрагмент кода возвращает ноль:

request.getParameter("val1");

catalina.out показывает:

ВНИМАНИЕ: Параметры: Ошибка декодирования символов. Параметр 'val1' со значением '%' был проигнорирован.

Я обнаружил, что Spring декодирует строку запроса и request.getQueryString() возвращает val1=%, но не val1=%25.

Как предотвратить UrlDecoding здесь?

Это ошибка? Обратите внимание, что для параметра urlDecode установлено значение false.

Любые идеи, чтобы обойти эту проблему, потому что мне действительно нужно использовать символы типа %&=.

Ответы [ 2 ]

1 голос
/ 25 февраля 2012

То, что вам нужно сделать, это не использовать карту параметров Spring. Создайте фильтр, который будет читать строку запроса в ее необработанном формате, самостоятельно декодировать ее, получать нужные значения и добавлять их в bean-компонент, который можно будет прочитать позже, когда вам это понадобится. Я не совсем понимаю, как сделать последнюю часть, потому что Spring 2.0.5 устарел, и все, что я вам скажу, может не работать в этой версии. Объект, находящийся в области видимости сеанса, должен быть в порядке.

0 голосов
/ 02 июля 2015

У меня та же проблема. Тем не менее, я могу найти правильную кодировку в request.getQueryString ().

...