@RequestMapping
该注解除了能修饰方法,还能修饰类。
如上一文章中提到的代码,修改后得到:
package com.yoni.springmvc.handlers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/helloworld1")
@Controller
public class HelloWorld {
@RequestMapping("/helloworld2")
public String hello(){
System.out.println("Hello World!");
return "success";
}
}
这时访问hello()方法的的URL就变为了..../helloworld1/helloworld2
@RequestMapping除了能请求URL映射请求外,还可以使用请求方法、请求参数、请求头映射请求。
@RequestMapping的value、method、params及heads分别表示请求URL、请求方法、请求参数及请求的印社条件,之间的关系是“与”。
如上一段代码的hello()方法,如果将上面的@RequestMapping改为:@RequestMapping(value="/helloworld2",method=RequestMethod.POST)
那么在页面直接用<a>标签访问..../helloworld1/helloworld2,将会提示405错误,无法用GET的方法访问数据。
这样就只能用POST方法来访问该URL地址,比如在页面建一个表单,添加一个submit按钮来访问。
<form action="helloworld1/helloworld2" method="POST">
<input type="submit" value="submit"/>
</form>
将方法改为POST后,访问才能成功,该功能比较常用。
参数params请求参数使的用方法,注解改为@RequestMapping(value="/helloworld2",params = {"username","age != 10“} )
表示请求的参数里必须有username和age两个参数,且age不能等于10,否则访问失败。
参数heads请求表头的使用方法,注解改为@RequestMapping(value="/helloworld2",heads= {"Accept-Language=zh-cn,zh;q=0.8“} )
则表示在请求的时候,表头参数Accept-Language一定只能是”zh-cn,zh;q=0.8“,如果不是该属性,将无法访问。
以上两个参数在@RequestMapping注解中使用得比较少,主要是为了更精确的映射请求。
@RequestMapping注解还支持通配符,”?“表示一个字符,
如:@RequestMapping("/hellowworld2/?/helloworld3")表示URL地址为..../helloworld1/helloworld2/a/helloworld3,其中a可以是任意字符,但只能是一个字符。
”*“表示任意个字符,但仅仅只能是一层路径,如/helloworld1/helloworld2/abcde/helloworld3
”**”匹配多层路径,可以是多层路径,如/helloworld1/helloworld2/abcde/abcde/abcde/helloworld3。