@RequestMapping

Spring MVC 使用 @RequestMapping 注解为控制器指定该控制器可以处理那些 URL 请求

在控制器的类定义及方法定义处都可标注 @RequestMapping
 1. 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
 2. 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录

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

常用属性值:value:指定url,method 指定请求的方式,heasers : 指定请求头信息

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

      params 和 headers支持简单的表达式:

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

使用 @RequestMapping 映射请求
• 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

@PathVariable 映射 URL 绑定的占位符
      带占位符的 URL 是 Spring3.0 新增的功能,该功能在SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义
      通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过
      @PathVariable("xxx") 绑定到操作方法的入参中。

代码示例

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>

<body>

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

	<a href="testAntPath/123/abc">Test ParamsAndHeaders</a>
	<br>
	<br>

	<a href="testParamsAndHeaders?username=shagou&age=11">Test
		ParamsAndHeaders</a>
	<br>
	<br>

	<form action="testMethod" method="post">
		<input type="submit" value="submit">
	</form>
	<br>
	<br>

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

	<a href="testRequestMapping">Test RequestMapping</a>
	<!-- 为书写方便,这里讲 @RequestMapping 注解标注在类上面的方式去掉 -->
	<!-- <a href="springmvc/testRequestMapping">Test RequestMapping</a> -->
	<br>
	<br>

	<a href="helloworld">Hello SpringMVC</a>
</body>
</html>

 Controller 测试类

//@RequestMapping("/springmvc") 为书写方便这里去掉其对类的注解
@Controller
public class SpringMvcTest {
	
	private static final String SUCCESS = "success";
	
	/**
	 * 测试 @PathVariable 注解
	 * 可以映射 URL 中的占位符到目标方法的参数中
	 * @param id 
	 * @return
	 */
	@RequestMapping("/testPathVariable/{id}")
	public String testPathVariable(@PathVariable("id") Integer id) {
		System.out.println("SpringMvcTest.testPathVariable() : " + id);
		return SUCCESS;
	}
	
	/**
	 * 测试 @RequestMapping("/testAntPath/*\/abc") 支持通配符的方式,即在请求的时候那个 * 可以写任意字符,例如:http://localhost:8080/springmvc-1/testAntPath/12xx3/abc也可以访问
	 * @return
	 */
	@RequestMapping("/testAntPath/*/abc")
	public String testAntPath() {
		System.out.println("SpringMvcTest.testAntPath()");
		return SUCCESS;
	}
	
	/**
	 * 测试 可以使用 params 和 headers 属性
	 * 添加更精确的请求. params 和 headers 支持简单的表达式
	 * 
	 * PS: 这里注意下,如果指定了 heasers 属性,就不能使用 eclipse 内置的浏览器进行测试,因为会报错,使用外置的浏览器即可
	 * @return
	 */
	@RequestMapping(value = "/testParamsAndHeaders", params= {"username", "age!=10"}, headers= {"Connection=keep-alive"})
	public String testParamsAndHeaders() {
		System.out.println("SpringMvcTest.testParamsAndHeaders()");
		return SUCCESS;
	}
	
	/**
	 * 测试 @RequestMapping 注解 method 属性
	 * 指定请求的方式
	 * @return
	 */
	@RequestMapping(value = "/testMethod", method=RequestMethod.POST)
	public String testMethod() {
		System.out.println("SpringMvcTest.testMethod()");
		return SUCCESS;
	}
	
	/**
	 * 测试 @RequestMapping 注解既可以修饰方法,也可以修饰类,这点可以看 该注解源码上面的元注解对其进行的修饰
	 * @java.lang.annotation.Target(value={java.lang.annotation.ElementType.METHOD,java.lang.annotation.ElementType.TYPE})
	 * 
	 * 1. 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录
	 * 2. 方法处:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注  @RequestMapping,则方法处标记的 URL 相对于 WEB 应用根目录
	 * 
	 * @return
	 */
	@RequestMapping("/testRequestMapping")
	public String testRequestMapping() {
		System.out.println("testRequestMapping");
		return SUCCESS;
	}
}

 注解 @RequestMapping method 属性的取值范围

Spring MVC - 常用注解使用示例

@RequestParam 

绑定请求参数值,在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法

value:参数名称

required:是否必须。默认为true,表示请求参数中必须包含对应的参数,若不存在,则抛出异常。

代码示例:

index.jsp

<a href="testRestParam?username=ergou&age=11">Test RestParam</a>

Controller 类 

/**
  * @RequestParam 映射请求参数
  * 
  * value 值,即请求参数的参数名
  * required 该参数是否必传,默认为 true
  * defalutValue 请求参数默认值
  * 
  * @param username
  * @param age
  * @return
  */
@RequestMapping(value="/testRestParam")// 注意这里如果 age 的类型为 int ,并且没有传值会报错,可以通过属性 defalutValue为其设置默认值为0
public String testRequstParam(@RequestParam("username") String username, @RequestParam(value="age", required=false) Integer age) {
	System.out.println("SpringMvcTest.testRestParam() : username = " + username + ", age = " + age);
	return SUCCESS;
}

 @RequestHeader  映射请求头信息

 index.jsp

<a href="testRequestHeader">Test RequestHeader</a>

Controller 类 

/**
  * 测试 @RequestHeader 同 @RequestPara 映射请求头信息
  * @param al
  * @return
  */
// Accept-Language: zh-CN,zh;q=0.9
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader("Accept-Language") String al) {
	System.out.println("SpringMvcTest.testRequestHeader():" + al);
	return SUCCESS;
}

 @CookieValue

index.jsp
<a href="testCookieValue">Test CookieValue</a>

Controller 类
/**
  * @CookieValue 映射一个 Cookie值
  * 
  * @param sessionId
  * @return
  */
@RequestMapping(value="/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) {
	System.out.println("SpringMvcTest.testCookieValue():" + sessionId);
	return SUCCESS;
}

 

相关文章:

  • 2022-12-23
  • 2021-11-24
  • 2021-10-10
  • 2021-08-03
猜你喜欢
  • 2022-12-23
  • 2021-12-21
  • 2021-09-16
相关资源
相似解决方案