Spring MVC - 02 RequestMapping映射请求

Posted 安得广厦千万间

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring MVC - 02 RequestMapping映射请求相关的知识,希望对你有一定的参考价值。

使用 @RequestMapping 映射请求

1.SpringMVC 使用@RequestMapping 注解为 控制器 指定可以处理哪些URL 请求

2. 在控制器的 类定义 及 方法定义处 都可以标注@RequestMapping

类定义处: 提供初步的请求映射信息。 相对于 WEB 应用的根目录

方法处: 提供进一步的细分映射信息。相对于类定义处的URL。若类定义处未标注 @RequestMapping,则方法

处标记的URL 相对于WEB 应用的根目录

 

3.DispatcherServlet截取请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。

 

 

@Controller
public class SpringMVCTest {
    public static final String SUCCESS = "success";

    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        System.out.println("testRequestMapping");
        return SUCCESS;
    }
}

<a href="testRequestMapping">Test RequestMapping</a>

http://localhost:8080/testRequestMapping    

 

@Controller
@RequestMapping("springmvc")
public class SpringMVCTest {
    public static final String SUCCESS = "success";

    @RequestMapping("/testRequestMapping")
    public String testRequestMapping(){
        System.out.println("testRequestMapping");
        return SUCCESS;
    }
}

<a href="springmvc/testRequestMapping">Test RequestMapping</a>

http://localhost:8080/springmvc/testRequestMapping  

 

映射请求参数、请求方法或请求头

 

@RequestMapping 除了可以使用 请求URL 映射请求 外,还可以使用 请求方法、请求参数 及 请求头映射请求

 

@ RequestMapping 的 value、method、params及 headers 分别表示 请求 URL、 请求方法、请求参数及请求头的映射条件,它们之间是的关系。联合使用多个条件可让请求映射更加精确化。

 

params 和 headers 支持简单的表达式

- param1:表示请求必须包含名为 param1的请求参数

- !param1:表示请求不能包含名为 param1的请求参数

- param1!=value1:表示请求包含名为 param1的请求参数,但其值不能为 value1

- {“param1=value1”,”param2”}:表示请求必须包含名为 param1 和 param2的两个请求参数,且param1参数的值必须为 value1

 

    /**
     * 使用 method 属性来指定请求方式
     * @return
     */
    @RequestMapping(value = "/testMethod", method = RequestMethod.POST)
    public String testMethod(){
        System.out.println("testMethod");
        return SUCCESS;
    }

 

<a href="springmvc/testMethod">Test Method</a><br/>

 

 

<form action="springmvc/testMethod" method="POST">
<input type="submit" value="submit"/>
</form>

    @RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"})
    public String testParamsAndHeaders(){
        System.out.println("testParamsAndHeaders");
        return SUCCESS;
    }

 

<a href="springmvc/testParamsAndHeaders?username=sun&age=10">Test ParamsAndHeaders</a><br/>

报错:
20-Oct-2018 16:39:22.796 警告 [catalina-exec-1] org.springframework.web.servlet.PageNotFound.handleNoSuchRequestHandlingMethod No matching handler method found for servlet request:
path \'/springmvc/testParamsAndHeaders\', method \'GET\', parameters map[\'username\' -> array<String>[\'sun\'], \'age\' -> array<String>[\'10\']]

修改age=11 后访问正常

 

设置 headers 

HTTP 协议报文格式

 

    @RequestMapping(value = "/testParamsAndHeaders", params = {"username", "age!=10"}, headers = {"Accept-Language=zh-CN,zh;q=0.9"})
    public String testParamsAndHeaders(){
        System.out.println("testParamsAndHeaders");
        return SUCCESS;
    }

IE 无法访问, Chrome 可以访问

 

 

Ant 风格资源地址

Ant 风格资源地址 支持 3种匹配符:

? : 匹配文件名中的一个字符

* : 匹配文件名中的任意字符

**: ** 匹配多层路径

 

@RequestMapping 支持 Ant 风格的URL:

/user/*/createUser: 匹配 /user/aaa/createUser 、 /user/bbb/createUser等URL

/user/**/createUser: 匹配 /user/createUser 、 /user/aaa/bbb/createUser等URL

/user/createUser??: 匹配 /user/createUserAA 、 /user/createUserBB等URL

@RequestMapping("/testAntPath/*/abc")
public String testAntPath(){
  System.out.println("testAntPath");
  return SUCCESS;
}
<a href="/springmvc/testAntPath/mmm/abc">Test AntPath</a><br/><br/>

 

 

@ PathVariable 映射 URL 绑定的占位符

带占位符的 URL 是 Spring 3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑式的意义。

 

通过 @ PathVariable 可以将URL 中占位符 参数绑定到 控制器 处理方法的入参中:

URL 中的 {xxx} 占位符可以通过 @ PathVariable(“xxx”) 绑定到操作方法的入参中。

 

    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id){
        System.out.println("testPathVariable: " + id);
        return SUCCESS;
    }

 

<a href="/springmvc/testPathVariable/1">Test PathVariable</a><br/><br/>

Console:   testPathVariable: 1




以上是关于Spring MVC - 02 RequestMapping映射请求的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 中的全局异常定义不起作用

Spring MVC HelloWorld

Spring MVC 项目结构

spring boot学习02如何在spring boot项目中访问jsp

Spring MVC入门实例

Spring Boot 注解:全家桶快速通