上代码:
@GetMapping(value="/user/{useraccount}")
public void getUserAccount(@PathVariable("useraccount") String userAccount) {
logger.info("useraccount :" + userAccount);
}
正常访问:
/user/zhangsan
打印:useraccount : zhangsan
看似一切正常
but:
访问:/user/zhangsan/lisi
打印:useraccount : zhangsan
咦,为啥不是useraccount :zhangsan/lisi ?
@PathVariable并没有我们想象的聪明,对于参数中的/并不能跟实际路径/分开
事实上,有. ; -等都不能正确切分。
怎么办呢?
两种方案:
1,简单点,直接使用@RequestParam代替
@GetMapping(value="/user")
public void getUserAccount(@RequestParam("useraccount") String userAccount) {
logger.info("useraccount :" + userAccount);
}
用/user?useraccount=zhangsan 访问
2,使用正则过滤
@GetMapping(value="/user/{useraccount:[a-zA-Z0-9\\.\\-\\_\\;\\\]+}")
public void getUserAccount(@PathVariable("useraccount") String userAccount) {
logger.info("useraccount :" + userAccount);
}
正常访问:
/user/zhangsan
打印:useraccount : zhangsan
当然,这个就有点不灵活了,第一种简单又方便