今天测试人员告诉我系统中新建的一个带点的用户无法登录,如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