文章目录
1、@Controller注解
@Controller注解用于标记一个类,使用它标记的类就是一个Spring MVC Controller对象,即一个控制器类。Spring使用扫描机制查找应用程序中所有基于注解的控制器类。分发出力气会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解,而使用@RequestMapping注解的方法才是真正处理请求的处理器。
2、@RequestMapping注解
@RequestMapping注解可以用来注释一个控制器类,在这种情况下,所有方法都将映射为相对于类级别的请求,表示该控制器处理的所有请求都被映射到value属性所指示的路径下。
使用@RequestMapping注解可指定下表所示的属性。
属性 | 类型 | 是否必要 | 说明 |
---|---|---|---|
value | String[] | 否 | 用于将指定请求的实际地址映射到方法上 |
name | String | 否 | 给映射地址指定一个别名 |
method | RequestMethod[] | 否 | 映射指定请求的方法类型,包括GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE |
consumes | String[] | 否 | 指定处理请求的提交内容类型(Content-Type),例如application/json、text/html等 |
produces | String[] | 否 | 指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型 |
params | String[] | 否 | 指定request中必须包含某些参数时,才让该方法处理 |
headers | String[] | 否 | 指定request中必须包含某些指定的header值,才能让该方法处理请求 |
Path | String[] | 否 | 在Servlet环境中只有:uri路径映射(例如“/myPath.do”)。也支持如ant的基于路径模式(例如“/myPath/*,”)。在方法层面上,支持相对路径(例如“edit. do”) |
2.1 value属性
value属性将URL映射到方法上,由于value属性是@RequestMapping注解的默认属性,因此,如果只有唯一的属性,则可以省略属性名。但如果有超过一个属性,就必须写上value属性名称。value属性的值也可以是一个空字符串。
2.2 method属性
method属性用来指示该方法仅仅处理哪些HTTP请求方式。例如下面的代码段代表该方法只支持POST请求:
@RequestMapping(value="/hello",method=RequestMethod.POST)
也可以同时支持多个HTTP请求方式,如:
@RequestMapping(value="/hello",method={RequestMethod.POST,RequestMethod.GET})
2.3 consumes属性
consumes属性指定处理请求的提交内容类型(Content-Type)。例如下面的代码段表示该方法处理request Content-Type为“application/json”类型的请求,且只支持POST请求。
@RequestMapping(value="/hello",method=RequestMethod.POST,consumes="application/json")
2.4 produces属性
produces属性指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型。
@RequestMapping(value="/hello",method=RequestMethod.POST,produces="application/json")
表示方法仅处理request请求中Accept头中包含了"application/json"的请求,同时指明了返回的内容类型为"application/json"。
2.5 params属性
params属性指定request中必须包含某些参数值时,才让该方法处理。例如下面的代码段表示方法仅处理其中名为“myParam”、值为“myValue”的请求。
@RequestMapping(value="/hello",method=RequestMethod.POST,params="myParam=myValue")
2.6 headers属性
headers属性指定request中必须包含某些指定的header值,才能让该方法处理请求。例如下面的代码段表示方法仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.baidu.com”的请求
@RequestMapping(value="/hello",method=RequestMethod.POST,headers="Refer=http://www.baidu.com")
3、@RequestParam注解
@RequestParam注解用于参数绑定
@RequestParam注解用于将指定的请求参数赋值给方法中的形参,其属性如下表所示。
属性 | 类型 | 是否必要 | 说明 |
---|---|---|---|
name | String | 否 | 指定请求头绑定的名称 |
value | String | 否 | name属性的别名 |
required | String | 否 | 指示参数是否必须绑定 |
defaultValue | String | 否 | 如果没有传递参数而使用的默认值 |
在对前端传递过来的参数与处理该请求的方法中的形参进行绑定时,如果参数名一致则可以实现自动绑定,如果不一致,则需要使用@RequestParam注解来告诉Spring MVC如何进行参数绑定。
4、@PathVariable注解
@PathVariable注解常用于利用Spring MVC实现RESTful分割。详见Spring MVC使用篇(十六)—— 实现RESTful风格。
5、@RequestHeader注解
@RequestHeader注解用于参数绑定
@RequestHeader注解用于将请求的头信息区数据映射到功能处理方法的形参上,其属性如下表所示。
属性 | 类型 | 是否必要 | 说明 |
---|---|---|---|
name | String | 否 | 指定请求头绑定的名称 |
value | String | 否 | name属性的别名 |
required | String | 否 | 指示参数是否必须绑定 |
defaultValue | String | 否 | 如果没有传递参数而使用的默认值 |
@RequestHeader注解示例代码如下:
@RequestMapping(value="/requestHeaderTest")
public void requestHeaderTest(@RequestHeader("User-Agent") String userAgent,@RequestHeader(value="Accept") String[] accepts){
}
以上配置自动将请求头"User-Agent"的值赋到userAgent变量上,并将"Accept"请求头的值赋到accepts参数上。
6、@CookieValue注解
@CookieValue注解用于参数绑定
@CookieValue注解用于将请求的Cookie数据映射到功能处理方法的形参上,其属性如下表所示。
属性 | 类型 | 是否必要 | 说明 |
---|---|---|---|
name | String | 否 | 指定请求头绑定的名称 |
value | String | 否 | name属性的别名 |
required | String | 否 | 指示参数是否必须绑定 |
defaultValue | String | 否 | 如果没有传递参数而使用的默认值 |
使用@CookieValue注解示例代码如下:
@RequestMapping(value="/cookieValueTest")
public void cookieValueTest(@CookieValue(value="JESSIONID",defaultValue="")String sessionId){
}
以上配置会自动将JESSIONID值设置到sessionId参数上,defaultValue表示Cookie中没有JESSIONID时默认为空。
7、@SessionAttributes注解
@SessionAttributes注解用于参数绑定
@SessionAttributes注解允许我们有选择地指定Model中的哪些属性需要转存到HttpSession对象中,其属性如下表所示。
属性 | 类型 | 是否必要 | 说明 |
---|---|---|---|
names | String | 否 | Model中属性的名称,即存储在HttpSession当中的属性名称 |
value | String | 否 | names属性的别名 |
types | Class<?>[] | 否 | 指示参数是否必须绑定 |
8、@ModelAttribute注解
@SessionAttributes注解用于参数绑定
@ModelAttribute注解将请求参数绑定到Model对象,该注解只支持一个属性value,类型为String,表示绑定的属性名称。
被@ModelAttribute注解注释的方法会在Controller每个方法执行前被执行,因此在一个Controller映射多个URL时,要谨慎使用。