Springmvc之RequestMapping

Springmvc之RequestMapping

RequestMapping

  • 标记客户的请求与哪一个类和方法对应
  • 使用@RequestMapping同时对类和方法进行注解,相当于最终将这两处的注解路径拼接起来,比如类上使用@RequestMapping("/user"),在方法上使用@RequestMapping("/login.do"),那么拼接时访问的路径为http://localhost:8080/ProjectName/user/login.do

属性

  • value : 默认的属性,表示映射的地址,如果只有这一个属性,那么默认可以不写value,比如@RequestMapping("/login.do")@RequestMapping(value="/login.do")是一样的效果
  • method:指定是请求的方式,我们知道请求的方式有post,get,put,delete。一般常用的是post,get,一旦我们在其中定义这个method属性,那么如果请求的方式不是这个method指定的属性值,那么就不会访问到这个方法。
    • 其实只要不指定这个method属性,无论是post还是get方式的都会执行这个方法,只有当其设置了method属性才会做限定
    • 比如我们使用了 @RequestMapping(value="login.do",method=RequestMethod.GET),但是我们使用表单提交的是<form action="<%=request.getContextPath%>/project/user/login.do" method="post"></form>,那么这个表单的请求就不会对应上面的注解的方法,因为表单的提交方式是post,但是RequestMapping定义的是methodget方式,会响应405错误
  • params : params是用来指定请求中包含的参数,其中的值是一个字符串数组的形式,并且这个还支持简答的表达式
    1. param: 表示请求参数中必须包含param这个参数至于为其赋予的值可以随便,但是必须包含这个字段
    2. param!=value: 表示请求参数中必须包含param这个参数,但是为其赋予的值不能等于value这个值,其他的什么值都是可以的
    3. !param :表示请求参数中一定不能包含这个param字段,如果包含这个字段,那么将不能映射到这个地址
    4. {“param1”,“param2”} : 指定请求参数中必须包含着两个请求参数,至于为其赋什么值随便
/*
     * 请求的参数中必须不能包含name属性,age必须不能等于12,必须包含sex,address必须等于xuzhou
     */
@RequestMapping(value="/testParams",params={"!name","age!=12","sex","address=xuzhou"})
    public String testParams(){
        System.out.println("testParams");
        return SUCCESS;
    }
  • headers : headersparams同样是支持简单的表达式,同样是一个字符串数组,这里一样的是适用于上面的表达式
    /*
     * 请求的参数中必须不能包含name属性,age必须不能等于12,必须包含sex,address必须等于xuzhou
     * 请求头中的Accept-Language不能等于zh-CN,zh;q=0.8
     */
    @RequestMapping(value="/testParams",params={"!name","age!=12","sex","address=xuzhou"},headers={"Accept-Language!=zh-CN,zh;q=0.8"})
    public String testParams(){
        System.out.println("testParams");
        return SUCCESS;
    }

RequestMapping支持Ant风格的通配符

  • 在学习struts2中的时候也是支持通配符调用的,比如_等。现在springmvc中也是支持通配符风格的,但是只支持Ant风格的,如下:
    • : 表示一个任意的字符 springmvc/testAnt?可以使用springmvc/testAnta`这个地址来访问,其中最后一个a可以替换成任意的字符
    • * : 表示支持多个任意的字符 /spingmvc/testAnt/* 可以使用springmvc/testAnt/aaaaa这个地址来访问,其中最后一层的路径可以使用任意的字符串替换
    • ** : 匹配多层路径 /springmvc/testAnt/** 可以使用/springmvc/testAnt/user/test这个来访问,当然也可以是多层的路径
/*
     * 这里的* 表示支持任意多个字符,因此这里可以使用:springmvc/testAnt/user这个地址来访问,其中最后一层use可以写成任意的字符串即可
     *
     */
    @RequestMapping(value="/testAnt/*",method=RequestMethod.GET)
    public String testAnt(){
        System.out.println("testAnt");
        return SUCCESS;
    }

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件开发 -- 分享 互助 成长

很经典的GDB调试命令,包括查看变量,查看内存

在你调试程序时,当程序被停住时,你可以使用print命令(简写命令为p),或是同义命令inspect来查看当前程序的运行数据。print命令的格式是: prin...

1.5K6
来自专栏转载gongluck的CSDN博客

第1章 简介

IPC是进程间通信(interprocess communication)的简称。 每当在一个Unix函数中发生错误时,全局变量errno将被设置成一个指示错误...

2736
来自专栏kl的专栏

skywalking源码分析之javaAgent工具ByteBuddy的应用

关于skywalking请看我上一篇博文,其使用javaAgent技术,使得应用接入监控0耦合。今天在分析skywaking过程中,对javaAgent技术有了...

7978
来自专栏哲学驱动设计

C# async/await 使用总结

今天搞这两个关键字搞得有点晕,主要还是没有彻底理解其中的原理。 混淆了一个调用异步方法的概念: 在调用异步方法时,虽然方法返回一个 Task,但是其中的代码已经...

2416
来自专栏老马寒门IT

Node入门教程(8)第六章:path 模块详解

1834
来自专栏Java帮帮-微信公众号-技术文章全总结

FreeMarket模板引擎快速入门【面试+工作】

2176
来自专栏菩提树下的杨过

ZooKeeper 笔记(4) 实战应用之【消除单点故障】

关键节点的单点故障(Single Point of Failure)在大型的架构中,往往是致命的。比如:SOA架构中,服务注册中心(Server Registe...

2439
来自专栏java相关

并发基本概念介绍

1195
来自专栏linux驱动个人学习

信号量、互斥锁、自旋锁、原子操作

linux内核中有多种内核锁,内核锁的作用是: 多核处理器下,会存在多个进程处于内核态的情况,而在内核态下,进程是可以访问所有内核数据的,因此要对共享数据进行保...

5644
来自专栏前端杂货铺

node中的Stream-Readable和Writeable解读

在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream。Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-Inpu...

3859

扫码关注云+社区

领取腾讯云代金券