springboot教程-@RequestMapping源码与详解

作用

url 和 处理方法 之间的映射关系

源码

@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 {};
}

value 属性

@AliasFor("path")
String[] value() default {};

映射路径,可以是数组

例子

  • value可以省略,如:@RequestMapping("/save")

  • 可以是数组,如:@RequestMapping({"/save","/add"})

匹配上下文(context)后面的部分

@RequestMapping("/save") 中的 /save,匹配的是 http://ip:port/context/save

也就是说:@RequestMapping("/save") 开头中的 / ,指上下文(context)后面的 /

注意: 这与 .html 文件中的超链接不同,超链接 <a href='/hi.html'>超链接</a> 中的 /,指 http://ip:port/ 端口号后面的 /

path 属性

@AliasFor("value")
String[] path() default {};

value,映射路径,可以是数组

例子:

  • path 不能省略,如:@RequestMapping(path="/save")

  • 可以是数组,如:@RequestMapping(path={"/save","/add"})

可以声明 类、方法上

@Target({ElementType.METHOD, ElementType.TYPE}) 表示该注解可以声明 方法

例子

比如开发学生管理系统,那么肯定有学生的增删改查功能,如下:

@Controller
public class StudentCtrl {

    @RequestMapping("/student/save")
    public String save(){
        return "saveSuccess";
    }

    @RequestMapping("/student/update")
    public String update(){
        return "updateSuccess";
    }

    @RequestMapping("/student/delete")
    public String delete(){
        return "deleteSuccess";
    }

    @RequestMapping("/student/query")
    public String query(){
        return "result";
    }
}

这是会发现有共同的映射路径:/student ,这时就可以提取出来,声明到类上,改造如下:

@Controller
@RequestMapping("/student")
public class StudentCtrl {

    @RequestMapping("/save")
    public String save(){
        return "saveSuccess";
    }

    @RequestMapping("/update")
    public String update(){
        return "updateSuccess";
    }

    @RequestMapping("/delete")
    public String delete(){
        return "deleteSuccess";
    }

    @RequestMapping("/query")
    public String query(){
        return "result";
    }
}

method 属性

RequestMethod[] method() default {};

指定处理某种请求方法

http常见方法:GET(查)、POST(增)、PUT(改)、DELETE(删))

这些方法定义在 RequestMethod 类中

例子1

@RequestMapping(value = "/save",method = RequestMethod.POST) ,只能处理 post 请求,其他方法的请求,会报错

例子2

可以是数组,如:@RequestMapping(value = "/hello",method = {RequestMethod.GET,RequestMethod.POST}),只能处理 get、post 请求,其他方法的请求,会报错

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值