9

我在这里遇到了一个奇怪的问题,但不确定这是否是错误。该项目在 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. 但是当我这样做时,以下代码返回 null:

request.getParameter("val1");

catalina.out 显示:

警告:参数:字符解码失败。已忽略值为 '%' 的参数 'val1'。

我发现 Spring 解码查询字符串并request.getQueryString()返回val1=%但不是val1=%25.

如何在这里防止 UrlDecoding?

那是一个错误吗?请注意有urlDecode参数设置为false

解决这个问题的任何想法,因为我真的需要使用像%&=.

4

2 回答 2

1

您要做的就是不要使用 Spring 的参数映射。创建一个过滤器,它将读取原始格式的查询字符串,自行解码,获取您需要的值并将它们添加到稍后可以在需要时读取的 bean。我对如何做后半部分含糊不清,因为 Spring 2.0.5 已经过时了,我告诉你的任何内容都可能不适用于该版本。会话范围内的对象应该没问题。

于 2012-02-25T17:12:46.450 回答
0

我遇到了同样的问题。但是,我可以在 request.getQueryString() 中找到正确的编码。

于 2015-07-02T02:20:03.433 回答