SpringMVC--02RequestMapping注解

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参数类似,只是,该参数是对请求头进行指定

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值