简介

@RequestMapping注解是一个用来处理请求地址映射的注解,相当于Servlet中在web.xml中配置的映射作用一致,在控制器的类定义及方法定义处都可以标注。

用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

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

@RequestMapping支持Ant风格URL

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

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

** :匹配多层路径 

例如:

package com.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/helloworld_mvc")
public class HelloWorld {

@RequestMapping("/*/testAnt")
public String testAnt(){
return "success";
}
}

 注意:index.jsp中 a 标签中的mvcaa为随便写的,映射方法中的 * 号。

<%--
Created by IntelliJ IDEA.
User: 23369
Date: 2019/3/24
Time: 18:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="helloworld_mvc/mvcaa/testAnt">ant测试</a>
</body>
</html>


RequestMapping注解的六个属性

注意:若同时定义多个属性,他们之间是与的关系,联合使用多个条件可以让请求映射更加精确化。

1、 value, method

例子: 


  • value:     指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明)。value的uri值为以下三类:可以指定为普通的具体值、 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables)、 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);
  • method:  指定请求的method类型, GET、POST、PUT、DELETE等。
<%--
Created by IntelliJ IDEA.
User: 23369
Date: 2019/3/24
Time: 18:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>

<form action="helloworld_mvc/testMethod" method="post">
<input type="submit" value="测试指定method和value属性">
</form>
</body>
</html>
package com.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/helloworld_mvc")
public class HelloWorld {

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod(){
return "success";
}

}

2、 consumes,produces


  • consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。
  • produces:    指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

3、 params,headers


  • params: 指定request中必须包含某些参数值是,才让该方法处理。
  • headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

<%--
Created by IntelliJ IDEA.
User: 23369
Date: 2019/3/24
Time: 18:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>

<a href="helloworld_mvc/testParmter?username=hern&age=11">Params测试</a>

</body>
</html>


package com.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/helloworld_mvc")
public class HelloWorld {

@RequestMapping(value = "testParmter", params = {"username","age!=10"})
public String testParams(){
return "success";
}

}

例子:

index.jsp

<%--
Created by IntelliJ IDEA.
User: 23369
Date: 2019/3/24
Time: 18:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<a href="hello2">方法定义@RequestMapping</a>
<br>
<a href="helloworld_mvc/hello">类定义@RequestMapping</a>
</body>
</html>

success.jsp

<%--
Created by IntelliJ IDEA.
User: 23369
Date: 2019/3/24
Time: 18:33
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>success</h1>
</body>
</html>

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">

<context:component-scan base-package="com.helloworld"></context:component-scan>

<mvc:default-servlet-handler></mvc:default-servlet-handler>

<mvc:annotation-driven></mvc:annotation-driven>

<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

类处定义

提供初步的请求映射信息,相对于WEB应用的根目录。

package com.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/helloworld_mvc")
public class HelloWorld {

@RequestMapping("/hello")
public String hello(){
System.out.println("成功");
return "success";
}
}

方法处定义

提供进一步的细分映射信息,相对于类定义处的URL,若类定义处未标注@RequestMapping,则方法处标记的URL相对于WEB应用的根目录。

package com.helloworld;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorld2 {

@RequestMapping("/hello2")
public String hello(){
return "success";
}
}