2012-01-30 9 views
8

私は奇妙な問題を抱えています。 プロジェクトはSpring Frameworkで実行されています。クエリ文字列が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> 

コントローラmappend someUrl.htmに私はval1として%を渡したい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> 

使用。しかし、私はこれをやっている時に、次のコードは、nullを返します。

request.getParameter("val1"); 

catalina.outを示しています

WARNING:パラメータ:文字のデコードに失敗しました。値 '%'のパラメータ 'val1'は無視されました。

私は春のクエリ文字列とrequest.getQueryString()リターンval1=%ではなくval1=%25をデコードすることを見つけます。

ここでUrlDecodingを防止するにはどうすればよいですか?

これはバグですか? urlDecodeパラメータがfalseに設定されていることに注意してください。

私は本当に%&=のような文字を使用する必要があるため、この問題を回避するためのアイディアです。

+0

あなたはどちらのSpringバージョンを使用していますか? – ustun

+0

Springバージョンは2.0.5です。 – Sqeezer

+0

文字をエンコードできませんか? http://www.ietf.org/rfc/rfc2396.txtは%をエスケープシーケンスを開始するものとして定義していますが、これに従わないと問題が発生する可能性があります。 –

答えて

1

あなたがしなければならないことは、Springのパラメータマップを使用しないことです。クエリ文字列をそのままの形式で読み込み、自分でデコードし、必要な値を取得し、必要に応じて後で読み込むことができるBeanに追加するフィルタを作成します。私はSpring 2.0.5が古いので、後半部分をどうやって行うのか漠然としています。あなたが言うことは、そのバージョンでは動作しないかもしれません。セッションスコープ内にあるオブジェクトは問題ありません。

0

同じ問題が発生しています。しかし、私は正しいencodingをrequest.getQueryString()で見つけることができます。

関連する問題