一 RequestMapping注解的源码
package org.springframework.web.bind.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
二 RequestMapping注解的作用
用于建立请求 URL 和处理请求方法之间的对应关系。
三 RequestMapping注解可以出现的位置
1. 类上
请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录。写的话需要以/开头。它出现的目的是为了使我们的 URL 可以按照模块化管理,例如:
账户模块:
/account/add
/account/update
/account/delete
...
订单模块:
/order/add
/order/update
/order/delete
红色的部分就是把 RequsetMappding 写在类上,使我们的 URL 更加精细。
2. 方法上
请求 URL 的第二级访问目录。
四 RequestMapping注解的属性
1. value:用于指定请求的 URL。它和 path 属性的作用是一样的。
2. method:用于指定请求的方式,如果我们写method={RequestMethod.POST},那么就不能接收GET请求了。
3. params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样。
例如:
params = {"username"},表示请求参数必须有username
params = {"username"="zhangsan"},表示请求参数必须有username,且username的值必须是zhangsan
params = {"moeny!100"},表示请求参数中 money 不能是 100。
4. headers:用于指定限制请求消息头的条件。
注意:
以上四个属性只要出现 2 个或以上时,他们的关系是与的关系。
五 案例
package cn.itcast.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(path="/user")
public class UserController {
/**
* 用户登录
* 访问路径:/user/login
* 请求方式:必须是GET请求
* 请求参数:请求参数必须有username
* 请求头:请求头中必须有Accept
* @return
*/
@RequestMapping(value = "/login",method =RequestMethod.GET,params = {"username"},headers = {"Accept"})
public String login(){
System.out.println("登录页面");
return "login";
}
/**
* 用户注册
* @return
*/
@RequestMapping(path = "/register")
public String register(){
System.out.println("注册界面");
return "register";
}
}