1

以下のようなコントローラーマッピングがあります

 @RequestMapping(value = { "/search"}, method = RequestMethod.GET)
 public @ResponseBody
 Object searchProducts(@PathVariable("query") String query,
 @RequestParam(value = "param1", required = false) String param1,
 @RequestParam(value = "param2", required = false) String param2,)

以下に示すようにURLを使用すると、うまく機能します

 http://host/app_name/search?param1=[value]&param2=[value]

ただし、エスケープ文字を使用すると壊れます

 http://host/app_name/search?param1=[value]&param2=[value]

springcontext または web.xml に、エンコードを自動的に処理できるようにする構成はありますか?? 私はすでにweb.xmlでcontectの下に設定しようとしましたが、うまくいきません

 <context-param> 
 <param-name>defaultHtmlEscape</param-name> 
 <param-value>true</param-value> 
 </context-param>  
4

3 に答える 3

3

&amp;&は HTML エスケープ シーケンスであり、URLのように扱う必要はありません。したがって、正しい URL を生成するように内部システムを修正することをお勧めします。

ただし、何らかの理由でそれができない場合は、次の (ハック的な) 方法でこの問題を解決できます。

  • のサブクラスにFilterオリジナルをラップする を作成します。HttpServlerRequestHttpServlerRequestWrapper
  • そのサブクラスで、「固定」パラメーターのマップを作成し (つまり、元のリクエストからパラメーターを取得し、パラメーター名の先頭から削除して新しいパラメーター マップを作成します)、そのマップを使用するメソッドをamp;オーバーライドします。getParameter*()
于 2012-06-06T14:48:10.843 に答える
2

Spring がそれを値の一部として扱い、'&amp;'URL エンコードではなく HTML エンコードされることは理にかなっています。

適切な GET 文字列を作成するのではなく、システムが'&'asを HTML エンコードする理由を理解しようとします。'&amp;'

実際に GET パラメータの値にアンパサンドを含めたい場合は、%26 を使用します。これは、URL を介して渡されたときに「&」にデコードされます。

于 2012-06-06T14:48:44.317 に答える