当我尝试将URL发送到服务器时,它看起来像: http://192.168.0.80:8080/directory/getCertainServices/1/Кузовныеработы
但在服务器端“Кузовныеработы”参数如下所示:
ÐÑзовнÑе ÑабоÑÑ
我正在使用Spring框架中的RestTemplate从客户端发送数据:
@Override
protected Service[] doInBackground(Object... voids) {
restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return restTemplate.getForObject(customURL, Service[].class);
}
服务器端代码:
@RequestMapping(value = "/getCertainServices/{autoServiceId}/{serviceCategory}", method = RequestMethod.GET)
@ResponseBody
public List<Object> getService(@PathVariable("autoServiceId") Long autoServiceId, @PathVariable("serviceCategory") String serviceCategory){
return dataBaseServiceService.findByAutoServiceAndCategory(autoServiceId, serviceCategory);
}
任何人都可以在这里提出建议吗?
更新问题: 这是否意味着我必须在URL路径中仅使用英语单词?
答案 0 :(得分:1)
Tomcat Wiki有一个很好的页面,名为&#34; Character Encoding Issues&#34;这很好地描述了这个问题。
解决方案取决于所使用的实际Web服务器,但如果它是Tomcat(Spring的默认设置),则该解决方案位于该Wiki页面上:
如何更改GET参数的解释方式?
Tomcat将使用ISO-8859-1作为整个URL的默认字符编码,包括查询字符串(&#34; GET参数&#34;)(尽管请参阅下面的Tomcat 8通知)。
有两种方法可以指定如何解释GET参数:
将server.xml中元素的
URIEncoding
属性设置为特定内容(例如URIEncoding="UTF-8"
)。将server.xml中元素的
useBodyEncodingForURI
属性设置为true
。这将导致连接器使用请求主体的GET参数编码。在从8.0.0开始的Tomcat 8中(8.0.0-RC3,具体而言),元素的
URIEncoding
属性的默认值取决于&#34;严格的servlet遵从性&#34;设置。URIEncoding
的默认值(严格合规关闭)现在为UTF-8
。如果&#34;严格的servlet遵从&#34;已启用,默认值为ISO-8859-1
。