Символы не 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(valu,e="/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.
Может кто-нибудь объяснить, почему Spring не анализирует переменную пути как UTF-8, несмотря на эту конфигурацию, и как это сделать?
Там, кажется, смешанные мнения о том,CharacterEncodingFilter
на самом деле решает эту проблему. По крайней мере, в другом (не загрузочном) проекте Spring, который я используюweb.xml
зарегистрироватьCharacterEncodingFilter
, Здесь он успешно используется, чтобы POST-тела анализировались как UTF-8, но я не мог заставить его работать там и для переменных пути.
Этот ответ предполагает, что он должен быть настроен в настройках Tomcat. Если так, как это делается на встроенном сервере?