查询字符串由Spring Framework解码

时间:2012-01-30 17:58:28

标签: java forms servlets spring-mvc urldecode

我在这里遇到一个奇怪的问题,但不确定这是不是错误。 该项目在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

任何解决问题的想法,因为我真的需要使用像%&=这样的字符。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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