Spring MVC - @PathVariable точка (.) Обрезается
Просмотрите пример Spring MVC@RequestMapping и@PathVariable.
@RequestMapping("/site")
public class SiteController {
@RequestMapping(value = "/{q}", method = RequestMethod.GET)
public ModelAndView display(@PathVariable("q") String q) {
logger.debug("Site : q : {}", q);
return getModelAndView(q, "site");
}
//...
Смотрите следующие случаи:
-
Для ввода
/site/google, «q» отобразитgoogle -
Для ввода
/site/google.com, «q» по-прежнему будет отображатьgoogle, точка (.) Усечена !? -
Для ввода
/site/google.com.my, «q» будет отображатьgoogle.com, последняя точка (.) Усечена! -
Для ввода
/site/google.com.my.abc, «q» отобразитgoogle.com.my -
Для ввода
/site/cloud.google.com, «q» отобразитcloud.google
Последняя точка (.) Всегда усекается.
Note
Протестировано с Spring 3 и Spring 4.
Решение
Чтобы исправить это, добавьте отображение регулярного выражения{q:.+} в@RequestMapping
@RequestMapping("/site")
public class SiteController {
@RequestMapping(value = "/{q:.+}", method = RequestMethod.GET)
public ModelAndView display(@PathVariable("q") String q) {
logger.debug("Site : q : {}", q);
return getModelAndView(q, "site");
}
//...
Теперь для ввода/site/google.com «q» будет отображать правильныйgoogle