我指示URL发送这样的Ajax请求:
url += '/' + something + '/' + id; var response; $.ajax({ async : false, type: 'DELETE', url: url, ...
My removeId是一个包含UTF-8字符的变量。我将像这样在Java端处理该变量:
removeId
@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE) public void myMethod(HttpServletResponse response, @PathVariable String id) { ...
但是id,Java端的变量与其原始变量有所不同,因为UTF-8字符变为奇怪的东西。
id
如何从JavaScript端发送UTF-8字符并在Java端再次对其进行转换(带有REST的Spring 3,我的Web服务器是Tomcat 7)?
PS 1: 即使我不使用encodeUriComponent,似乎我的URL本身也在编码?
encodeUriComponent
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值似乎是使用iso-8859-1字符集而不是utf-8解码的。URL的路径部分的编码未在Java EE中指定,并且没有用于设置它的标准api。对于查询参数,可以在访问任何参数之前正确使用request.setCharacterEncoding进行解码。的CharacterEncodingFilter正是这么做的,但对路径参数没有影响。
CharacterEncodingFilter
为了使它在Tomcat中工作,您必须URIEncoding将Connector元素的属性设置server.xml为“ utf-8”。
URIEncoding
Connector
server.xml