我指示我的URL发送这样的Ajax请求:
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)会自动做到吗?有什么方法可以将 Controller 作为路径变量自动解码(我的意思是无需编写类似以下内容的代码:
URLDecoder.decode(id,"UTF-8");
它将自动转换)
最佳答案
您看到的id值似乎是使用iso-8859-1字符集而不是utf-8解码的。 URL的路径部分的编码未在Java EE中指定,并且没有用于设置它的标准api。对于查询参数,可以在访问任何参数之前使用request.setCharacterEncoding正确解码它们。 CharacterEncodingFilter
可以做到这一点,但对路径参数没有影响。
为了使它在Tomcat中工作,您必须将其URIEncoding
中Connector
元素的server.xml
属性设置为“utf-8”。
您可以在this excellent answer中找到有关Java Webapp中字符编码的所有信息,以解决类似的问题。