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