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