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