Spring MVC - @PathVariable точка (.) Обрезается

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");

    }
//...

Смотрите следующие случаи:

  1. Для ввода/site/google, «q» отобразитgoogle

  2. Для ввода/site/google.com, «q» по-прежнему будет отображатьgoogle, точка (.) Усечена !?

  3. Для ввода/site/google.com.my, «q» будет отображатьgoogle.com, последняя точка (.) Усечена!

  4. Для ввода/site/google.com.my.abc, «q» отобразитgoogle.com.my

  5. Для ввода/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