Spring MVC中 URI包含中文有关问题
Spring MVC中 URI包含中文问题
由于SEOer要求,一般我们的参数都是写在URI里面的,而不是用参数的形式传递的。
如:http://search.aiyibang.com/search?key=内衣
转换为:
http://search.aiyibang.com/search/内衣
但是
package com.aiyibang.search.controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.servlet.ModelAndView; public class SearchController { @RequestMapping(value = "/search/{keyword}", method = { RequestMethod.GET, RequestMethod.POST }) public ModelAndView customerLook(@PathVariable String keyword) { ModelAndView mav=new ModelAndView(); return mav; } }
发现 是无法找到这个请求的,也就是404,后然网上搜索,发现是tomcat 默认URI不支持中文的缘故。
解决方案:
到 TOMCAT/conf下找到server.xml,添加URIEncoding="UTF-8"进行URL编码设置就可以解决中文问题。
另外我们经常遇到路径中有点".",而点是特殊字符,比如.html, .do等等,所以Spring MVC默认是把点后面的信息当作文件后缀,这时候我们就要修改这个默认值。
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"> <property name="interceptors" ref="localeChangeInterceptor" /> <property name="useDefaultSuffixPattern" value="false" /> </bean>
另外,这时候如果只设置这个,请求可以传递到对于的controller,但传过去的数据会有问题,只会传最后一个点前面的数据,除非你在最后加上 “/”,比如/search/内衣.服装/ 这样就会把“内衣.服装”当作整体,不然只会得到“内衣”。这时候我们可以这样设置@RequestMapping("/search/{keyword:.*}")
参考文章:http://blog.****.net/milife2012/article/details/8059535