RequestMapping注解
注解定义
// 作用域:类、接口、方法
@Target({ElementType.TYPE, ElementType.METHOD})
// 生命周期:运行时
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
@Reflective({ControllerMappingReflectiveProcessor.class})
public @interface RequestMapping {
String name() default "";
// 使用@AliasFor注解将path和value属性等同
// 默认情况下不写参数名表示value=xxx,当前可以看作path=value=xxx
// 用于指定映射路径
// 参数类型则说明可以同时接收多个参数,以实现多对一映射
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
// 用于指定响应的请求方式
// 接收一个enum中元素的数组
RequestMethod[] method() default {};
// 指定request中必须包含的信息
String[] params() default {};
// 用于指定响应头中必须包含的信息
String[] headers() default {};
// 指定提交内容类型
String[] consumes() default {};
//指定返回内容类型
String[] produces() default {};
}
path|value参数
在类上使用@RequestMapping注解
由于@RequestMapping注解可以作用在类和方法上,那么根据层次结构,我们可以在类上使用该注解,使得在在进行映射时,类中的方法路径都加上类路径
@RequestMapping("/user")
public class MyController(){
@RequestMapping("/login")
public String login(){
return "login";
}
}
此时,该映射路径就会被拼接成/user/login
通配符的使用
在指定path|value属性时,可以使用’?‘,’*‘,’**'通配符来实现模糊匹配
?:用以匹配除开’/‘和’?‘的任意单个字符
*:用于匹配除开’/‘和’?'任意多个字符
**:用以匹配任意路径
// 匹配路径为/user/login(加一个任意非限定字符)
@RequestMapping("/user/login?")
// 匹配路径为/user/(任意多个字符)
@RequestMapping("/user/*")
// 匹配路径为/user/(任意路径)
@RequestMapping("/user/**")
RESTFul风格URL
RESTFul风格的URL即不使用传统的key=value的方式在URL中传递参数,而是使用类似路径的方式直接写入参数
@RequestMapping("/user/login/{username}/{password}")
public String login(
@PathVariable("username")
String username,
@PathVariable("password")
String password){
}
// 这里以请求路径/user/login/aaa/bbb为例
// 那么此时我们接收到的username=aaa,password=bbb
method参数
// 指定请求的方式必须为POST
// 还有其他可选项,如GET,POST,PUT,DELETE等
@RequestMapping(value = "/user/login",method = RequestMethod.POST)
public String login(){
return "login";
}
对于不同的method参数,其实还衍生了许多不同的注解如:@PostMapping;@GetMapping;@DeleteMapping这些注解见名知意
为了使得前端向服务器发送请求更规范,提出如下建议
- GET:获取资源,只允许读取数据,不影响数据的状态和功能。使用URL中传递参数或者在HTTP请求的头部使用参数,服务器返回请求的资源
- POST:向服务器提交资源,可能还会改变数据的状态和功能。通过表单等方式提交请求体,服务接收请求体后,进行数据处理
- PUT:更新资源,用于更新指定的资源上所有可编辑内容。通过请求体发送需要被跟新的全部内容,服务器接收数据后,将被更新的资源进行替换或修改。
- DELETE:删除资源,用于删除指定的资源。将要被删除的资源标识符放在URL中或请求体中
- HEAD:请求服务器返回资源的头部,与GET命令类似,但是所有返回的信息都是头部信息,不能包含数据体。主要用于资源监测和缓存控制。
params参数
// 请求路径为/login并且在url中携带了username和password参数,无论其值
// /login?username=aaa&password=aaa
@RequestMapping(value="/login",params={"username","password"})
// 请求路径为/login并且在url中没有携带username和password参数
// /login?user=aaa&pass=aaa
@RequestMapping(value="/login",params={"!username","!password"})
// 请求路径为/login并且在url中有username=123和password=123
// /login?username=123&password=123
@RequestMapping(value="/login",params={"username=123","password=123"})
// 请求路径为/login并且在url中的参数username!=123和password!=123
// // /login?username=aaa&password=aaa
@RequestMapping(value="/login",params={"username!=123","password!=123"})
headers参数
该属性使用与params参数类似,只是,该参数是对请求头进行指定
1270

被折叠的 条评论
为什么被折叠?



