我正在尝试通过文字系统开发搜索。我有一个输入,我输入我的单词并提交,将我重定向到页面,找到结果到这样的链接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
的配置中我缺少必须为/*
的网址映射,但我不知道如何设置它。
如果您认为您的配置类型有一些解决方案,或者您可以向我推荐另一个类似的解决方案,并解释它是如何工作的,我将非常感激。
提前谢谢。
答案 0 :(得分:1)
我找到的解决方案是将Tomcat设置连接器设置为URIEncoding="UTF-8"
,然后在我的Controller中使用URL编码器和解码器,如下所示:
String decodedWord = URLDecoder.decode(word, "UTF-8");