春の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`を表示します
最後のドット(。)は常に切り捨てられています。
解決策
これを修正するには、正規表現マッピング
{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`を表示します
参考文献
正規表現を用いたDoc – URIテンプレートパターン]