Символы не ASCII в переменной пути приложения Spring MVC при настройке встроенного сервера Tomcat с использованием Spring Boot
Я создаю сервис, используя Spring MVC, настроенный с помощью Spring Boot, где я хочу иметь возможность иметь произвольные символы Юникода в URL.
Просматривая веб-сайты, я получаю
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Main {
public static void main(String... args) throws Exception {
SpringApplication.run(Main.class, args);
}
@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceEncoding(true);
return characterEncodingFilter;
}
}
а также
@Controller
public class WordController {
@RequestMapping(value="/word/{word}", method=RequestMethod.GET)
public String greeting(Model model, @PathVariable("word") String word) {
System.out.println(word);
model.addAttribute("word", word);
return "word";
}
}
где шаблон "слово" просто распечатывает слово из модели.
Когда я запускаю сервер и ввожуhttp://localhost:8080/word/æøå
в Chrome, текст, напечатанный на странице ответа (и в терминале)
æøå
который я думаю, что я признаю в качестве ISO-8859-1 интерпретацию датских буквæøå
когда они'фактически закодированы в UTF-8.
Глядя в ChromeЯ вижу, что это на самом деле запросыhttp://localhost:8080/word/%C3%A6%C3%B8%C3%A52
которая действительно кажется кодировкой URL-адреса строки в UTF-8.
Кто-нибудь может объяснить, почему весна неt проанализировать переменную пути как UTF-8, несмотря на эту конфигурацию, и как это сделать?
Там, кажется, смешанные мнения о том,CharacterEncodingFilter
на самом деле решает эту проблему. По крайней мере, в другом (не загрузочном) проекте Spring, который я используюweb.xml
зарегистрироватьCharacterEncodingFilter
, Вот этоуспешно использовались, чтобы POST-тела анализировались как UTF-8, но я могутам тоже не работает для переменных пути.
Этот ответ предполагает, что он должен быть настроен в Tomcatс настройками. Если так, как это делается на встроенном сервере?