次のようなAjaxリクエストを送信するようにURLに指示します。
url += '/' + something + '/' + id;
var response;
$.ajax({
async : false,
type: 'DELETE',
url: url,
...
私のremoveId
は、UTF-8文字を含む変数です。その変数をJava側で次のように処理します:
@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
public void myMethod(HttpServletResponse response, @PathVariable String id) {
...
ただし、Java側のid
変数は、UTF-8文字が奇妙なものに変わるため、元の変数とは異なります。
JavaScript側からUTF-8文字を送信し、それをJava側(RESTを使用したSpring 3、WebサーバーはTomcat 7)で再度変換するにはどうすればよいですか?
PS 1:encodeUriComponent
を使用していなくても、URLが単独でエンコードされているようです。
PS 2:質問をより明確にするために:
i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7
Id変数がその値を持っているのを見ると:
araç
の代わりに:
ara%C3%A7
Spring(またはTomcat)は自動的にそれを行いますか?コントローラーをパス変数として自動的にデコードする方法はありますか(つまり、次のように何も記述せずに)
URLDecoder.decode(id,"UTF-8");
自動的に変換されます)
表示されるid値は、utf-8の代わりにiso-8859-1文字セットを使用してデコードされているようです。 URLのパス部分のエンコーディングはJava EEで指定されておらず、それを設定するための標準APIはありません。クエリパラメータには request.setCharacterEncoding を使用できます。パラメータにアクセスして正しくデコードする前に。CharacterEncodingFilter
はまさにそれを実行しますが、パスパラメータには影響しません。
Tomcatでこれを機能させるには、server.xml
のURIEncoding
要素のConnector
属性を「utf-8」に設定する必要があります。
Java webappでの文字エンコードについて知りたいと思ったことは、同様の質問に対する この優れた回答 にあります。
私はここで答えを見つけました: http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request
私はSpring側でその構成を行いました:
<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
uTF-8では問題なく動作します。
JavaScriptを埋め込んでいるページでページエンコーディングを設定してみましたか?
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
開始<head>
タグのすぐ下にこれを追加して、ページエンコーディングがUTF-8に設定されていることを確認します。
<meta charset="utf-8">
また、JavaScriptファイルがUTF-8エンコーディングで保存されていることを確認してください。テキストエディタの設定を確認してください。
JavaScriptの使用:
data=encodeURIComponent(data);
データをエンコードするために、そしてJavaであなたはすることができます:
data=Java.net.URLDecoder.decode(data);