@PathVariable和@RequestParam

@PathVariable

  1. 定义URL变量规则

如图所示

类似的url,可以在@RequestMapping注解中用{ }来表明它的变量部分,例如:

这里的{username}就是我们定义的变量规则,id是变量的名字,那么这个URL路由可以匹配下列任意URL并进行处理:

  • /employee/1545654545

  • /employee/8485645415

  • /employee/8974845116

注意:不能同时匹配多个变量,例如:

  • /employee/1545654545/44553554554

  • /employee/8485645415/45451234564

但可以定义URL路由包含多个URL变量:

这种情况下,Spring能够根据名字自动赋值对应的函数参数值,当然也可以在@PathVariable中显示地表明具体的URL变量值。

匹配正则表达式(不常用)

很多时候,需要对URL变量进行更加精确的定义。例如,用户名只可能包含大小写字母,数字,下划线,我们希望:

  • /user/fpc是一个合法的URL

  • /user/#$$$则是一个不合法的URL

除了简单地定义{username}变量,还可以定义正则表达式进行更精确地控制,定义语法是{变量名: 正则表达式}。[a-zA-Z0-9_]+是一个正则表达式,表示只能包含小写字母,大写字母,数字,下划线。如此设置URL变量规则后,不合法的URL则不会被处理,直接由SpringMVC框架返回404NotFound。

@RequestMapping(value = "/user/{username: [a-zA-Z0-9]+}/blog/{blogId}")

@RequestParam

在访问各种各样的网站时,经常会发现网站的URL的最后一部分形如:?xx=yy&zz=ww。这就是HTTP协议中的Request参数,它有什么用呢?先看一个例子:

  • 在知乎中搜索web

  • 在知乎中搜索java

  • 自己遇到的,诸如此类

这里的type=content&q=web就是搜索请求的参数,不同参数之间用&分隔,每个参数形如name=value的形式,分别表示参数名字和参数值。在这个例子中,我们输入不同的搜索关键词,在搜索结果页面的URL的q参数是不同的。也就是说,HTTP参数实际上可以认为是一种用户的输入,根据不同的用户输入,服务器经过处理后返回不同的输出(例如搜索spring和搜索java,显示结果是不一样的)。

在SpringMVC框架中,可以通过定义@RequestMapping来处理URL请求。和@PathVariable一样,需要在处理URL的函数中获取URL中的参数,也就是?key1=value1&key2=value2这样的参数列表。通过注解@RequestParam可以轻松地将URL中的参数绑定到处理函数方法的变量中

例如:

二者的相同点:

@RequestParam和@PathVariable都能够完成类似的功能——因为本质上,它们都是用户的输入,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。要访问一篇博客文章,这两种URL设计都是可以的:

  • 通过@PathVariable,例如/employee/1

  • 通过@RequestParam,例如employee?id=1

建议:

1、当URL指向的是某一具体业务资源(或资源列表),例如博客,用户时,使用@PathVariable

2、当URL需要对资源或者资源列表进行过滤,筛选时,用@RequestParam

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值