SpringBoot映射路径中匹配正则表达式

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

你好,我是博主宁在春

关于在映射路径中匹配正则表达式,我是第一次知道(原谅我的无知)。在之前都是手动判断(if、类型判断啥的)或者是添加验证。这次学长给了我一个项目,让我学习学习,就是在里面发现这个的。

一、曾经

像我以前的使用,都是像下面这种方式使用的,根本就没考虑这个问题😂

 /**
 * 在请求中我们并没有对id的输入做限制,什么都可以输入
 * 我这里限制了id的类型为Long。
 * 如果输入字符进入,则会直接报400错误
 *
 * @param id
 * @return
 */
 @GetMapping("/{id}")
 public String demo1(@PathVariable("id") Long id){
     return "demo"+id.toString();
 }
复制代码

输入字符,直接报400

image-20210919102320786

输入数字可以正常访问。

image-20210919102349512

这样的结果出现是我限制了id的类型为Long,我们换成String类型试试。

 @GetMapping("/{id}")
 public String demo1(@PathVariable("id") String id){
     return "demo: "+id;
 }
复制代码

结果就是都可以访问了。😂

image-20210919102628213

思考:假定id一定需要为全数字,但是类型又为String,这种字符输入的是不是应该被抛掉,不应该请求进来勒?

二、使用正则表达式

正则表达式就是起这样的作用。

 /**
 * 在这个请求中,我们就限制了 url中的id必须为数字类型
 * 输入非数字类型就会直接转到404
 * @param id
 * @return
 */
 @GetMapping("/{id:\d+}")
 public String demo(@PathVariable("id") Long id){
     return "demo"+id.toString();
 }
复制代码

输入数字是可以正常访问的:

image-20210919103035803

看看输入字符:

报的错误是没有找到,404,不是之前的请求错误。

image-20210919103058181

我们接着换成String类型来试的话,结果也是一模一样的。

三、小结

使用正则表达式在Resulful风格中单参数时非常实用。

或者是在下面这样的情况下也可以非常实用,就是请求中既有一个单参数,又携带了一个Java对象。

 @PostMapping("/{id:\d+}")
 public String demo2(@PathVariable("id") String id,@RequestBody BookDTO bookDTO){
     return "demo: "+id;
 }
复制代码

四、自言自语

本文就是简单介绍了,具体使用具体情况具体分析啦。

你好,我是博主宁在春主页

希望本篇文章能让你感到有所收获!!!

我们:待别日相见时,都已有所成

\