在Web应用中URL通常不是一成不变的,例如微博两个不同用户的个人主页对应两个不同的URL:http://weibo.com/user1,http://weibo.com/user2。我们不能对于每一个用户都编写一个被@RequestMapping注解的方法来处理其请求,也就是说,对于相同模式的URL(例如不同用户的主页,它们仅仅是URL中的某一部分不同,为他们各自的用户名,我们说它们具有相同的模式)。
1@RequestMapping 中的引用变量,即定义URL变量规则
可以在@RequestMapping注解中用{}来表明它的变量部分,例如:
@RequestMapping("/users/{username}")
这里{username}就是我们定义的变量规则,username是变量的名字,那么这个URL路由可以匹配下列任意URL并进行处理:
- /users/tianmaying
- /users/ricky
- users/tmy1234
需要注意的是,在默认情况下,变量中不可以包含URL的分隔符/,例如路由不能匹配/users/tianmaying/ricky,即使你认为tianmaying/ricky是一个存在的用户名。
2获取请求中的URL变量
@RequestMapping("/users/{username}")
@ResponseBody
public String userProfile(@PathVariable String username){
// return String.format("user %s", username);
return "user" + username;
}
url 中的{username} 会被spring 传递给参数通过 @PathVariable 所修饰的注解上,当然如果 修饰的参数名字与URL 变量的名字不同则可以指定:
public String userProfile(@PathVariable("username") String username){
3请求路径中 定义多个URL变量
@RequestMapping("/user/{username}/blog/{blogId}")
@ResponseBody
public String getUerBlog(@PathVariable String username , @PathVariable int blogId) {
return "user: " + username + "blog->" + blogId;
}
所以你可能注意到, 请求路径中的变量名字与方法参数的名字一样的情况下,springmvc 会直接入参,当然如果不一样,还需要向上面那样 @PathVariable("username") String username
4 请求路径设置表达式
对于请求路径中变量只可能包含小写字母,数字,下划线
@RequestMapping("/user/{username:[a-zA-Z0-9_]+}/blog/{blogId}")
如此设置URL变量规则后,不合法的URL则不会被处理,直接由SpringMVC框架返回404Not Found。
摘自
https://www.cnblogs.com/fangpengchengbupter/p/7823493.html