2012-01-30 4 views
8

Ho un problema strano qui, non sono sicuro se questo sia l'errore. Il progetto è in esecuzione in Spring Framework.La stringa di query viene decodificata da 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 utilizzando 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> 

voglio passare % come val1. Ma quando sto facendo questo, il seguente pezzo di codice restituisce un valore nullo:

request.getParameter("val1"); 

catalina.out mostra:

AVVERTENZA: Parametri: carattere decodifica riuscita. Il parametro 'val1' con valore '%' è stato ignorato.

scopro che la primavera decodifica stringa di query e restituisce request.getQueryString()val1=% ma non val1=%25.

Come impedire UrlDecoding qui?

È un errore? Si noti che il parametro urlDecode è impostato su false.

Qualsiasi idea per risolvere il problema, perché ho davvero bisogno di utilizzare caratteri come %&=.

+0

Quale versione Spring stai usando? – ustun

+0

La versione Spring è 2.0.5. – Sqeezer

+0

Non puoi codificare i personaggi? http://www.ietf.org/rfc/rfc2396.txt definisce% come iniziante in sequenza di escape, non obbedire a questo probabilmente causerà problemi. –

risposta

1

Quello che devi fare non è usare la mappa dei parametri di Spring. Crea un filtro che legge la stringa di query nel suo formato raw, decodificalo tu stesso, ottieni i valori necessari e aggiungili a un bean che può essere letto più tardi quando ti serve. Sono vago su come fare la seconda parte perché Spring 2.0.5 è vecchio e tutto quello che ti dico potrebbe non funzionare in quella versione. Un oggetto che è in ambito di sessione dovrebbe andare bene.

0

Ho lo stesso problema. Tuttavia, posso trovare la giusta codifica in request.getQueryString().