Spring MVC:@PathVariable不适用于西里尔语

时间:2017-10-18 12:26:21

标签: spring spring-mvc

我正在尝试通过文字系统开发搜索。我有一个输入,我输入我的单词并提交,将我重定向到页面,找到结果到这样的链接localhost:8080/Project/search/word,一切正常。

但是当我试图搜索一个西里尔字('дума')时,它什么也没找到。在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没有。我已经阅读了很多关于这个问题的文章,我找不到解决我的问题和配置的方法。我尝试使用Tomcat连接器URIEncoding,但它也不起作用。

我注意到在我characterEncodingFilter的配置中我缺少必须为/*的网址映射,但我不知道如何设置它。

如果您认为您的配置类型有一些解决方案,或者您可以向我推荐另一个类似的解决方案,并解释它是如何工作的,我将非常感激。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我找到的解决方案是将Tomcat设置连接器设置为URIEncoding="UTF-8",然后在我的Controller中使用URL编码器和解码器,如下所示:

String decodedWord = URLDecoder.decode(word, "UTF-8");