@RequestMapping注解可以使用请求URL、请求方式、请求参数、请求头和带占位符的URL等方式来映射请求。使用@RequestMapping映射请求的具体实现代码下载地址:http://download.csdn.net/download/bingbeichen/9791533。
1. 使用请求URL映射请求
使用@RequestMapping注解为控制器指定其可以处理哪些URL请求,其不仅可以标注方法也可以标注类,测试代码如下:
// 当前控制器的testRequestMapping()方法仅可处理URL=test/testRequestMappingde的请求
@Controller
@RequestMapping("/test")
public class TestRequestMapping {
private static final String SUCCESS = "success";
/**
* @RequestMapping注解 : 不仅可以标注在方法定义处,也可以标注在类定义处
* 1). 类定义处:提供初步的请求映射信息,其相对于WEB应用的根目录
* 2). 在方法处:提供进一步细分的请求映射信息,其相对于类定义处的URL
若类定义处未标注 @RequestMapping,则方法处标记的URL直接相对于WEB应用的根目录
* @return
*/
@RequestMapping("/testRequestMapping")
public String testRequestMapping() {
return SUCCESS;
}
}
2. 使用请求方式映射请求
@RequestMapping注解除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数及请求头来映射请求;其中,@RequestMapping注解的value、method、params和headers属性分别表示请求URL、请求方法、请求参数及请求头的映射条件,联合使用多个条件可让请求映射更加精确化。测试代码如下:
/**
* 使用method属性指定请求方式,即要求请求方式为post
* @return
*/
@RequestMapping(value="/testMethod", method=RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
3. 使用请求参数或请求头映射请求
【了解】可以使用@RequestMapping的params和headers属性来更加精确地映射请求,其支持简单的表达式,具体说明如下:
- param1:表示请求必须包含名为param1的请求参数;
- !param1:表示请求不能包含名为param1的请求参数;
- param1 != value1:表示请求必须包含名为param1的请求参数,但其值不能为value1;
- {“param1=value1”, “params2”}:表示请求必须包含名为param1和param2的请求参数,且param1参数值必须为value1。
4. 使用Ant风格资源地址映射请求
【了解】@RequestMapping支持Ant风格的URL,而Ant风格资源地址支持三种匹配符,即:
- ?:匹配文件名中的一个字符,如/user/?/name可匹配/user/a/name、/user/b/name等;
- *:匹配文件名中任意个字符,如/user/*/name可匹配/user/a/name、/user/abc/name等;
- **:匹配多层路径,如/user/**/name可匹配/user/name、/user/aa/name等。
5. 使用@PathVariable映射URL中绑定的占位符
带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展的过程中具有里程碑的意义。通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的入参中;即URL中的 {xxx} 占位符可以通过@PathVariable(“xxx”) 绑定到操作方法的入参中,测试代码如下:
/**
* @PathVariable 可以用来映射URL中的占位符到目标方法的参数中
* 请求URL为test/testPathVariable/135时,控制台输出为testPathVariable : 135
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id) {
System.out.println("testPathVariable : " + id);
return SUCCESS;
}
6. REST与HiddenHttpMethodFilter
资源表现层状态转化(Representational State Transfer,简称REST)是目前最为流行的一种互联网软件框架,具有结构清晰、符合标准、易于理解和扩展方便的优点。其核心思想是,在HTTP协议中,表示操作方式的GET、POST、DELETE和PUT共四个动词,分别对应数据库的增删改查操作,即GET用来获取资源、POST用来新建资源、DELETE用来删除资源、PUT用来更新资源。
然而,浏览器的form表单仅支持GET和POST请求,Spring 3.0添加了HiddenHttpMethodFilter过滤器,根据POST请求中“_method”参数值(可以为DELETE或PUT)将其转换为标准的DELETE和PUT请求。
具体实现步骤说明如下:
第一步:在web.xml文件中配置HiddenHttpMethodFilter过滤器;
<!-- 配置org.springframework.web.filter.HiddenHttpMethodFilter:可以把POST请求转为DELETE或PUT请求 -->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<!-- 此处必须为/*,否则容易出错 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
第二步:在index.jsp页面创建HTTP协议的GET、POST、DELETE和PUT请求;
<a href="test/testRest/8">TEST REST GET</a>
<br><br>
<form action="test/testRest" method="post">
<input type="submit" value="TEST REST POST" />
</form>
<br><br>
<form action="test/testRest/88" method="post">
<input type="hidden" name="_method" value="DELETE"/>
<input type="submit" value="TEST REST DELETE" />
</form>
<br><br>
<form action="test/testRest/888" method="post">
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="TEST REST PUT" />
</form>
<br><br>
第三步:在控制器中添加对应的处理方法;
/**
* REST风格的URL,以CRUD为例:
* 新增:/order HTTP POST
* 修改:/order/1 HTTP PUT
* 获取:/order/1 HTTP GET
* 删除:/order/1 HTTP DELETE
*
* 如何发送PUT请求或DELETE请求呢?
* 1). 需要在web.xml文件中配置HiddenHttpMethodFilter,其url-pattern为/*
* 2). 需要发送POST请求,并携带name="_method"的隐藏域,其值为DELETE或POST
*
* 在SpringMVC的目标方法中如何获取id呢?需要借助带占位符的URL和@PathVariable注解来获取
*
* @param id
* @return
*/
@RequestMapping(value="/testRest/{id}", method=RequestMethod.GET)
public String testRestGET(@PathVariable("id") Integer id) {
System.out.println("testRestGet : " + id);
return SUCCESS;
}
@RequestMapping(value="/testRest", method=RequestMethod.POST)
public String testRestPOST() {
System.out.println("testRestPOST");
return SUCCESS;
}
@RequestMapping(value="/testRest/{id}", method=RequestMethod.DELETE)
public String testRestDELETE(@PathVariable("id") Integer id) {
System.out.println("testRestDELETE : " + id);
return SUCCESS;
}
@RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)
public String testRestPUT(@PathVariable("id") Integer id) {
System.out.println("testRestPUT : " + id);
return SUCCESS;
}
本文详细介绍了Spring MVC框架中@RequestMapping注解的使用方法,包括如何使用URL、请求方式、请求参数、请求头以及带占位符的URL进行请求映射。此外还探讨了RESTful风格的API设计以及HiddenHttpMethodFilter的配置。

267

被折叠的 条评论
为什么被折叠?



