你好,我是博主
宁在春
关于在映射路径中匹配正则表达式,我是第一次知道(原谅我的无知)。在之前都是手动判断(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; }
四、自言自语
本文就是简单介绍了,具体使用具体情况具体分析啦。
希望本篇文章能让你感到有所收获!!!
祝
我们:待别日相见时,都已有所成
。
\