小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
你好,我是博主
宁在春
关于在映射路径中匹配正则表达式,我是第一次知道(原谅我的无知)。在之前都是手动判断(if、类型判断啥的)或者是添加验证。这次学长给了我一个项目,让我学习学习,就是在里面发现这个的。
一、曾经
像我以前的使用,都是像下面这种方式使用的,根本就没考虑这个问题😂
/**
* 在请求中我们并没有对id的输入做限制,什么都可以输入
* 我这里限制了id的类型为Long。
* 如果输入字符进入,则会直接报400错误
*
* @param id
* @return
*/
@GetMapping("/{id}")
public String demo1(@PathVariable("id") Long id){
return "demo"+id.toString();
}
复制代码
输入字符,直接报400
输入数字可以正常访问。
这样的结果出现是我限制了id的类型为Long,我们换成String类型试试。
@GetMapping("/{id}")
public String demo1(@PathVariable("id") String id){
return "demo: "+id;
}
复制代码
结果就是都可以访问了。😂
思考:假定id一定需要为全数字,但是类型又为String,这种字符输入的是不是应该被抛掉,不应该请求进来勒?
二、使用正则表达式
正则表达式就是起这样的作用。
/**
* 在这个请求中,我们就限制了 url中的id必须为数字类型
* 输入非数字类型就会直接转到404
* @param id
* @return
*/
@GetMapping("/{id:\d+}")
public String demo(@PathVariable("id") Long id){
return "demo"+id.toString();
}
复制代码
输入数字是可以正常访问的:
看看输入字符:
报的错误是没有找到,404,不是之前的请求错误。
我们接着换成String类型来试的话,结果也是一模一样的。
三、小结
使用正则表达式在Resulful
风格中单参数时非常实用。
或者是在下面这样的情况下也可以非常实用,就是请求中既有一个单参数,又携带了一个Java对象。
@PostMapping("/{id:\d+}")
public String demo2(@PathVariable("id") String id,@RequestBody BookDTO bookDTO){
return "demo: "+id;
}
复制代码
四、自言自语
本文就是简单介绍了,具体使用具体情况具体分析啦。
你好,我是博主
宁在春
:主页希望本篇文章能让你感到有所收获!!!
祝
我们:待别日相见时,都已有所成
。
\
近期评论