Spring MVC:@PathVariable不适用于西里尔文
问题描述:
我正在尝试开发按字系统进行搜索。我有一个输入,我键入我的单词并提交重定向到发现结果的页面,像这样的链接这样的链接localhost:8080/Project/search/word
和一切工作正常。Spring MVC:@PathVariable不适用于西里尔文
但是,当我尝试搜索西里尔字('дума')时,它什么也找不到。在URL提出 'дума',但在Java调试控制台显示дума
作为???????°
这是我WebAppInitializer
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
return new Class[]{ WebConfig.class };
}
protected Class<?>[] getServletConfigClasses() {
return null;
}
protected String[] getServletMappings() {
return new String[]{ "/" };
}
protected Filter[] getServletFilters(HttpServletRequest request) {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setForceEncoding(true);
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[] { characterEncodingFilter};
}
}
控制器:
@RequestMapping(value = {"/search/word/{word}", "/search/word/{word}/page/{page}"}, method = RequestMethod.GET,
produces = "text/plain;charset=UTF-8")
public ModelAndView getSearchVideoByTitlePage(@PathVariable("word") String word,
@PathVariable(value = "page", required = false) Integer page, HttpServletRequest request,
HttpSession session)
@RequestParam
正常工作与cyrllic,但@PathVariable
没有按“T。我已经阅读了很多关于这个问题的文章,但是我找不到解决我的问题和配置的问题。我尝试了使用Tomcat连接器URIEncoding,但它也不起作用。
我注意到,在我的characterEncodingFilter
的配置中,我缺少URL映射,必须是/*
,但我不知道如何设置它。
如果你认为你对我的配置类型有一些解决方案,或者你可以给我推荐另一个类似的配置并解释它是如何工作的,我将非常感激。
预先感谢您。
答
我找到解决的办法是Tomcat的设置连接设置为URIEncoding="UTF-8"
,然后在我的控制器使用URL编码器和解码器是这样的:
String decodedWord = URLDecoder.decode(word, "UTF-8");