RequestMapping的相关知识讲解

为什么RequestMapping是一个Annotation我却不使用艾特符号呢?哈哈,大家都知道的,我就不解释了。阅读博客的同志们知道就可以了。

 

RequestMapping是SpringMVC经常使用的一个Annotation,所以关于它的知识点一定要熟悉。

 

代码演示部分是按照controller,然后是view的方式呈现。

下面是我的类名和类的注解

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

 

 

1、使用RequestMapping来修饰类
RequestMapping除了可以用来修饰方法,当然这也是SpringMVC相对于Struts2一个优势的地方。但是一定要知道的是RequestMapping也可以用来修饰类。若如此,则对应访问到此控制器的url为类配置信息加上方法配置信息
下面的例子中访问此控制器应该如此:springmvc/testRequestMapping

@RequestMapping("/testRequestMapping")
public String testRequestMapping() {
	return SUCCESS;
}
<a href="springmvc/testRequestMapping">testRequestMapping</a>


2、RequestMapping的method属性
RequestMapping的属性比较丰富,常见的默认属性就是value,用来指定URL地址。我们知道,在Annotation中使用的唯一属性是value的话,是可以省略的。现在介绍一个也比较常用的属性-method属性,这个属性用来指定请求类型。这时,客户端的请求被响应的条件除了URL正确外,请求的类型也应当和要求的类型对应,否则,控制器方法则不予处理该请求。详细使用方法见下面的例子。

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
	return SUCCESS;
}
<!-- Get方式的请求,错误405 -->
<a href="springmvc/testMethod">testMethod</a>
<!-- post方式的请求 -->
<form action="springmvc/testMethod" method="post">
	<input type="submit" value="testMethod">
</form>


3、RequestMapping的params和headers属性
params和headers属性在开发中使用较少,了解即可,params用来限制提交指定参数(而且有时需要满足一些规则)的请求可以访问到这个控制器方法,headers用来限制请求头与指定信息相同时才可以访问到这个控制器方法,params和headers都支持多参数,并且支持简单的表达式。我们看下面的例子就一目了然了。

@RequestMapping(value = "/testParamsAndHeaders", params = { "username", "age!=10" }, headers = {
			"Host=localhost:8080" })
public String testParamsAndHeaders() {
	return SUCCESS;
}
<a href="springmvc/testParamsAndHeaders?username=rgx&age=10">testParamsAndHeaders</a>

 

4、RequestMapping与Ant风格的通配符

RequestMapping的映射规则支持Ant风格的通配符,什么是Ant风格的通配符呢?
?  : 代表的是一个字符
*  : 代表任意个字符
** : 代表多层路径
下面的例子仅测试*通配符。

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


5、RequestMapping的搭档PathVariable注解
为什么我说PathVariable是RequestMapping的搭档呢,因为这个注解可以将URL中的占位符映射为方法参数,然后在方法中使用,很多人都认为PathVariable是SpringMVC向REST风格的URL请求挺进的重要里程碑。下面的一个方面即将讲到。以前的URL是什么形式,大概就是这样的:order?id=1,但是使用PathVariable注解后我们就可以这样写:order/1。关于PathVariable的使用方法见下面的例子。

@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer i) {
	System.out.println("testPathVariable:" + i);
	return SUCCESS;
}
<a href="springmvc/testPathVariable/1">testPathVariable</a>


6、RequestMapping与REST
咱们再来简单的说下这个REST风格的URL
* 就以数据库的CRUD为例:
* 意义   URL规则      请求类型 以前的风格
* 获取   /order/1 GET  get?1     
* 新增   /order   POST create
* 修改   /order/1 PUT     update?1
* 删除   /order/1 DELETE  delete?1
像上面这样去理解的话就很容易看懂了,但是拿去测试的同学注意了:
使用tomcat8可能会遇到一个问题,请求方式是DELETE或者PUT的的时候,由于控制器访问视图使用的是转发的式(即保留了请求方式),但是视图JSP不支持这两种请求方式,所以会报错,但是tomcat7神奇般的规避了这个错误所以在使用tomcat8上面跑SpringMVC项目时候,为了便于调试和优化,建议在方法方法前面加上@ResponseBody注解,此注解可以将方法返回的字符串直接作为页面的输出。即不进入视图解析器。

@RequestMapping(value = "/testRest/{id}", method = RequestMethod.DELETE)
	//@ResponseBody
public String testRestDelete(@PathVariable Integer id) {
	System.out.println("testRestDelete:" + id);
	return SUCCESS;
}

@RequestMapping(value = "/testRest/{id}", method = RequestMethod.PUT)
//@ResponseBody
public String testRestPUT(@PathVariable Integer id) {
	System.out.println("testRestPUT:" + id);
	return SUCCESS;
}

@RequestMapping(value = "/testRest", method = RequestMethod.POST)
public String testRestPost() {
	System.out.println("testRestPost");
	return SUCCESS;
}

@RequestMapping(value = "/testRest/{id}", method = RequestMethod.GET)
public String testRestGet(@PathVariable Integer id) {
	System.out.println("testRestGet:" + id);
	return SUCCESS;
}
<a href="springmvc/testRest/1">testRestGet</a>
<br>
<br>
<form action="springmvc/testRest" method="post">
	<input type="submit" value="testRestPost">
</form>
<br>
<br>
<form action="springmvc/testRest/1" method="post">
	<!-- 设置隐藏域。将_method加在请求中传给控制器 -->
	<input type="hidden" name="_method" value="DELETE"> <input type="submit" value="testRestDelete">
</form>
<br>
<br>
<form action="springmvc/testRest/1" method="post">
	<!-- 设置隐藏域。将_method加在请求中传给控制器 -->
	<input type="hidden" name="_method" value="PUT"> <input type="submit" value="testRestPut">
</form>
	<input type="submit" value="testRestPost">
</form>
<br>
<br>
<form action="springmvc/testRest/1" method="post">
	<!-- 设置隐藏域。将_method加在请求中传给控制器 -->
	<input type="hidden" name="_method" value="DELETE"> <input type="submit" value="testRestDelete">
</form>
<br>
<br>
<form action="springmvc/testRest/1" method="post">
	<!-- 设置隐藏域。将_method加在请求中传给控制器 -->
	<input type="hidden" name="_method" value="PUT"> <input type="submit" value="testRestPut">
</form>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值