关于@RequestMapping注解
在处理请求的方法之前添加@RequestMapping
注解,可以配置请求路径与处理请求的方法之间的映射关系!也就是访问某个路径时,就会调用注解后方的方法!
其实,还可以将这个注解添加在控制器类的声明之前!例如:
@Controller
@RequestMapping("user")
public class UserController {
}
一旦在类的声明之前添加了该注解,当前类中配置的所有请求路径中,都需要添加该注解配置的值,例如原本的路径是http://localhost:8080/springmvc02/login.do
,就要通过http://localhost:8080/springmvc02/user/login.do
才可以访问!
强烈推荐在每一个控制器类的声明之前都使用@RequestMapping
注解配置路径中的层级。
在类的声明之前添加了注解后,类之前的注解值,会和方法之前的注解值,组合起来,形成完整的路径配置值,在组合时,会忽略这2个配置值的两端多余的/
符号!SpringMVC框架会自行添加必要的/
,也就是说,在类和方法之前的配置值是:
user login.do
user /login.do
/user login.do
/user /login.do
user/ login.do
user/ /login.do
/user/ login.do
/user/ /login.do
以上8种配置方式是完全等效的!推荐使用第1种做法,或第4种做法,切忌不要随意使用多种不同的方式,避免出现语义不明!
在@RequestMapping
注解的源代码中,大致有:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
/**
* 为当前映射关系分配一个名称,没有实际作用;
* 以下代码中的name()表示注解的参数名称;
* 以下代码中的String表示注解的参数的值的类型;
* 以下代码中的default ""表示注解的参数的默认值;
* 在使用时的语法可以是:@RequestMapping(name="")
*/
String name() default "";
/**
* 该属性的作用是配置请求路径
* value是注解的默认属性,例如配置为@RequestMapping("")与@RequestMapping(value="")是等效的;
* 注意,如果同一个注解中配置多个属性,则每个属性都必须显式的声明属性名称,包含默认属性;
* 以下代码中的String[]表示注解的参数的值的类型是字符串数组
* 注意,如果该属性的值只有1个时,不需要显式的将值写为数组类型,直接写数组元素即可
* 例如配置为@RequestMapping("login.do")与@RequestMapping({"login.do"})是等效的;
* 所以,如果要配置的路径是login.do时,以下4种配置方式都是等效的:
* @RequestMapping("login.do")
* @RequestMapping(value="login.do")
* @RequestMapping({"login.do"})
* @RequestMapping(value={"login.do"})
* 以下代码中的@AliasFor("path")表示以下属性与path属性是等效的
*/
@AliasFor("path")
String[] value() default {};
/**
* 以下属性从SpringMVC框架4.2开始加入,更早期的版本不识别以下属性
*/
@AliasFor("value")
String[] path() default {};
/**
* 限制请求方式,例如配置为@RequestMapping(path="handle_login.do", method=RequestMethod.POST)
* 则表示handle_login.do路径的请求只能通过POST方式来访问
* 如果请求方式不匹配,就会出现405错误
*/
RequestMethod[] method() default {};
}