Spring源码篇(2)—RequestMappingInfo与RequestCondition(Handler的映射)

1. 测试:

1. 在两个方法上使用完全相同的@RequestMapping注解

    @RequestMapping(value = "/testApi")
    @ResponseBody
    public String testAPIV1(HttpServletResponse response) {
        System.out.println("请求进入...V1");
        return "success-V1";
    }

    @RequestMapping(value = "/testApi")
    @ResponseBody
    public String testAPIV2(HttpServletResponse response) {
        System.out.println("请求进入...V2");
        return "success-V2";
    }

效果:启动项目,出现异常:模棱两可的异常,映射的bean 方法已经存在。

Caused by: java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'systemController' method 
public java.lang.String com.tellme.controller.SystemController.testAPIV1(javax.servlet.http.HttpServletResponse)
to { /testApi}: There is already 'systemController' bean method

2. @RequestMapping的value相同,但是其他参数(以headers为例)不同。

    @RequestMapping(value = "/testApi",headers = {"Api-Version=0.1"})
    @ResponseBody
    public String testAPIV1(HttpServletResponse response) {
        System.out.println("请求进入...V1");
        return "success-V1";
    }

    @RequestMapping(value = "/testApi",headers = {"Api-Version=0.2"})
    @ResponseBody
    public String testAPIV2(HttpServletResponse response) {
        System.out.println("请求进入...V2");
        return "success-V2";
    }

正常启动项目后,发起请求,请求头中携带Api-Version=0.2调用V2版本。

结论:(正常情况下)同一个项目中,不能存在含有完全相同@RequestMapping注解的方法。

3. @RequestMapping中的value是通配符

    @RequestMapping(value = {"/testA*"})
    @ResponseBody
    public String testAPIV1(HttpServletResponse response) {
        System.out.println("请求进入...V1");
        return "success-V1";
    }

    @RequestMapping(value = "/testAp*")
    @ResponseBody
    public String testAPIV2(HttpServletResponse response) {
        System.out.println("请求进入...V2");
        return "success-V2";
    }

效果:当请求路径为http://localhost:8082/testAp1时,调用的是V2版本,当请求路径为http://localhost:8082/testA1是调用的是V1版本。

结论:即使一个请求可以获取到多个mapping对象时,依旧会返回一个最佳的HandlerMethod。

2. 根据请求映射Handler对象

源码:org.springframework.web.servlet.handler.AbstractHandlerMetho

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值