春の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
Spring3およびSpring4でテスト済み。

溶液

これを修正するには、@RequestMapping{q:.+}をマッピングする正規表現を追加します

@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を表示します。