Spring mvc 基础学习(三)——@RequestMapping的定义及功能

    RequestMapping直译成中文就是请求映射,通过@RequestMapping可以映射请求、请求的Content-Type或者Acdept头、http请求头、指定请求参数或头是否存在,或者这些信息的任意组合。

1.URL限制

    @RequestMapping注解将把请求被映射的方法缩小到特定的方法上。可以只在控制器方法中添加@RequestMapping,或者同时在控制器类和它的方法中添加。

例如:

直接映射方法:

@RequestMapping("viewProduct")
public String viewProduct(...){...}

此时,该方法的URL映射为:localhost:8080/XXX(工程名)/viewProduct

同时在控制器类和它的方法中添加

@Controller
@RequestMapping("product")
public class ProductControler
{
@RequestMapping("viewProduct")
public String viewProduct(...){...}
}

此时,该方法的URL映射为:localhost:8080/XXX(工程名)/product/viewProduct

URL映射的另一个重要方面呢是:如果请求匹配到多个不同的URL映射,那么最具体的映射胜出

如下面映射:

@RequestMapping("view/*")
public String viewAll(...){...}

@RequestMapping("view/*.json")
public String viewJson(...){...}

@RequestMapping("view/id/*")
public String view(...){...}

@RequestMapping("view/other")
public String viewOther(...){...}

许多不同的URL可能会匹配到不止一个方法:

例如URL:....../view/other.json可以匹配到viewAll、viewJson或者viewOther方法,但是viewOther方法更为具体,所以请求将被路由到viewOther方法。

2.http请求限制

    @RequestMapping方法特性接受一个或多个org.springframework.web.bind.annotation.RequestMethod枚举常量。如果控制器方法映射在method特性中添加一个或多个值,那么只有请求的HTTP方法匹配制定的常量之一时,请求才会被映射到该控制器方法。

如:

@Conntroller
@RequestMapping("account")
public class AccountManagementConntroller
{
    @RequestMapping(value="add",method=RequestMethod.GET)
    public String addFrom(...){...}

    @RequestMapping(value="add",method=RequestMethod.POST)
    public String addSubmit(...){...}
}

此时,.../account/add URL将同时匹配addFrom和addSubmit方法。该URL的GET请求将被路由至addForm方法,而POST请求将被路由至addSubmit方法。使用其他HTTP方法发出的请求将被拒绝。

3.请求参数限制

 @RequestMapping注解的params(n.参数的复数形式)特性可以指定一个或多个参数表达式,它们大的执行结果必须为真。如果请求无法匹配params特性指定的所有的表达式,那么它就不会被映射到控制器方法

例如:

@RequestMapping(value="can",params={"employee","confirm=true"})
    public String addSubmit(...){...}
只有在参数存在并且confirm参数存在还等于true时,才会调用该方法。


4.请求头限制

    @RequestMapping注解的headers特性和params特性类似,我们可以为任何头指定值或者表达式,也可以使用感叹号对这些表达式取反。但头限制有一个额外的特性:可以为每天类型头指定含有通配符的值。

例如:

@RequestMapping(value="user",headers="X-Client","content-type"="text/*")
public User user(...){...}

只有包含了X-Client头并且Content-type头为任意文本类型的请求才会匹配该方法。注意:不区分头名称的匹配的大小写

5.内容类型限制

特性consumes将接受一个或多个多媒体类型,它们必须匹配请求的Content-Type头,因此它定义了方法可以处理的内容类型。

特性produces将接受一个或多个媒体类型,它们必须匹配请求的Accept头。它指定了方法可以产生的内容类型。

例如:

@RequestMapping(value="song",consumes={"text/json","application/json"},produces={"text/json","application/json"})
public User song(...){...}

gai该请求映射只会匹配Content-Type头为application/json或者text/json,并且Accept头包含了application/json或者text/json的请求


在日常的使用中,@RequestMapping注解常用的还是URL限制和请求限制,其它的似乎不怎么常用,但是还是有可能会用到的,所以了解还是很有必要的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值