Spring使用@PathVariable注解参数带点号导致被截取的解决办法

今天测试人员告诉我系统中新建的一个带点的用户无法登录,如peter.lee

通过debug发现当peter.lee传递到一个查询方法的时候变成了peter,点和后边的内容全不见了,上网搜索一下原来是参数没有设置好。

原来的代码:

@RequestMapping(path = "/{userNo}", method = RequestMethod.GET)
@ResponseBody
public UserVO query(@PathVariable("userNo") String userNo) throws Exception {
	return service.getUserByUserNo(userNo);
}

网上解释说 在@RequestMapping的value中使用SpEL来表示,但是我看这明明是正则啊。

修改后代码:

@RequestMapping(path = "/{userNo:.+}", method = RequestMethod.GET)
@ResponseBody
public UserVO query(@PathVariable("userNo") String userNo) throws Exception {
	return service.getUserByUserNo(userNo);
}

修改地方是:

在@RequestMapping的path值的后边加上了【:.+】。真是神奇的代码。

这个【:.+】其实就是为了说明传递是参数是什么样式的,我这里是想要带上点,所以这样写的,别人的更复杂的都写成这样【:[a-zA-Z0-9\.]+】了。

网上还有解决办法是把访问的url里加上其他的字符串,这样就不会截取了,我没试,感觉像是可行。我在没有找到这个解决办法之前还有一个奇葩的想法,就是把点换成一个特殊符号,然后在这个方法里替换成点。还好没有这样做,要不然被架构师发现又要批评了(●—●)。

参考:

https://blog.csdn.net/hycacc/article/details/78990721

https://yq.aliyun.com/articles/28729

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值