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' は無視されました。

request.getQueryString()Spring はクエリ文字列をデコードして返す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 に答える