春の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テンプレートパターン]