2012-01-30 5 views
8

Estoy teniendo un problema extraño aquí, aunque no estoy seguro si este es el error. El proyecto se ejecuta bajo Spring Framework.Cadena de consulta es decodificada por Spring Framework

La vista:

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

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

Controller mappend a someUrl.htm usando 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> 

quiero pasar % como val1. Pero cuando estoy haciendo esto, el siguiente fragmento de código devuelve nulo:

request.getParameter("val1"); 

catalina.out muestra:

ADVERTENCIA: Parámetros: Carácter fracasó decodificación. El parámetro 'val1' con el valor '%' ha sido ignorado.

me entero de que la primavera decodifica cadena de consulta y request.getQueryString() vuelve val1=% pero no val1=%25.

¿Cómo prevenir la codificación de URL aquí?

¿Eso es un error? Tenga en cuenta que hay urlDecode parámetro establecido en false.

Cualquier idea para solucionar el problema, porque realmente necesito usar caracteres como %&=.

+0

¿Qué versión de Spring estás usando? – ustun

+0

La versión de Spring es 2.0.5. – Sqeezer

+0

¿No puedes codificar los caracteres? http://www.ietf.org/rfc/rfc2396.txt define% como iniciar en una secuencia escapada, no obedecer esto probablemente le cause problemas. –

Respuesta

1

Lo que tienes que hacer es no utilizar el mapa de parámetros de Spring. Cree un filtro que lea la cadena de consulta en su formato original, decodifíquelo usted mismo, obtenga los valores que necesita y agréguelos a un bean que podrá leer más adelante cuando lo necesite. No sé cómo hacer la última parte porque Spring 2.0.5 es antiguo y todo lo que le digo puede no funcionar en esa versión. Un objeto que está en el ámbito de sesión debería estar bien.

0

Tengo el mismo problema. Sin embargo, puedo encontrar la codificación correcta en request.getQueryString().

Cuestiones relacionadas