2012-03-07 6 views
3

私はspring mvcを使用しています。 פתはヘブライ語と英語ではないであることをスプリングmvcパス変数エンコード

http://localhost:8080/services/cities/פת.html 

予告:私はにサーフィンをしています。
私のコントローラは、次のとおりです。

@RequestMapping(value="/services/cities/{name}", method=RequestMethod.GET) 
public @ResponseBody List<SelectElement> getCities(@PathVariable String name) { 
    List<SelectElement> elements=null; 
    ... 
    ... 
    return elements; 
} 

問題は、コントローラがפתではなく、正しい文字を受信することです。
どうすれば修正できますか?

私がサーフしても:http://localhost:8080/services/cities/%D7%A4%D7%AA.htmlこの問題が発生します。

答えて

5

Tomcatを使用している場合は、ここで説明するように、Tomcatのserver.xml設定に<Connector>URIEncoding="UTF-8"を追加することによって、要求のためのURLエンコーディングを指定する必要があります。

http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8

+1

私はこのファイルを変更できないサーバーでこのアプリケーションをホストするつもりなので、tomcatのserver.xmlに触れない方がいいです。 – Naor

+0

コンテナ(tomcat)は、アプリケーションではないURLのテキストのエンコーディングを処理します。これは、本文のコンテンツとレスポンスのエンコーディングを処理します。私はあなたがこの場合に選択肢を持っているとは思わない(しかし、訂正するのはうれしい)。 – nickdos

+0

これは実際には動作しますが、私のものではないサーバーを構成する必要があるため、このソリューションは十分ではありません。私はそのようなことができるかどうかわからない。もう一つの解決策があるなら - 私は聞いてうれしい。 – Naor

0

はCharacterEncodingFilterような何かがPOSTリクエストのみで動作します、あなたがTomcatの

にリクエストをコードについての興味深い文書を持って

<filter> 
<filter-name>CharacterEncodingFilter</filter-name> 
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
<init-param> 
    <param-name>encoding</param-name> 
    <param-value>UTF-8</param-value> 
</init-param> 
<init-param> 
    <param-name>forceEncoding</param-name> 
    <param-value>true</param-value> 
</init-param> 

+0

私はすでにこのフィルタを持っています。 /*のフィルタマッピングもあります。 – Naor

+0

すべてのリクエストがこのフィルタによって傍受されていますか?私の知る限りでは、何か他のことが起こっていない限り、これは問題を解決するはずです。 –

+0

'/ *'は '/ services/cities /פת。html'のようなパスも参照していますか? – Naor

1

Here ... CharacterEncodingFilterフィルタを使用してください。 ISO-8859-1と異なるenconding URIを使用するには、Tomcat(または別のコンテナ)の設定を変更する必要があります。しかし、これはすべてのブラウザで動作するわけではなく、URIをどのようにエンコードするかによって異なります。

私のお勧めは、いつもという最も単純な文字を使用しています。あなたが達成しようとしていることを教えてくれたら、もっと良い解決策が見つかるかもしれません(アドレスバーに市の名前を直接入力する必要はありません)。

+0

私は 'mysite/cityname.html'にユーザーの手術を許可したいのですが、antはcitynameの関連結果を取得します。しかし、都市名はヘブライ語であるかもしれません。 – Naor

+0

Naor:ユーザーはアドレスバーまたはアプリケーションのテキストボックスに都市名を直接挿入しますか?最初は@nickdosと私が言っていることを試すことができますが、すべてのブラウザで動作するわけではありません。 – sinuhepop

関連する問題