• java springMVC之@RequestMapping注解


    目录

    @RequestMapping注解

    注解标识位置

    value属性

    method属性

    params属性

    headers属性

    ant风格路径

    路径占位符

    @RequestMapping注解
    @RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。 SpringMVC接收到指定的请求,就会来找到在映射关系中对应的控制器方法来处理这个请求。

    注解标识位置
    (1)@RequestMapping标识一个类:设置映射请求的请求路径的初始信息。

    (2)@RequestMapping标识一个方法:设置映射请求请求路径的具体信息。

    标识在方法上时

    @Controller
    //@RequestMapping(value = "/web")
    public class RequestMappingController {

    @RequestMapping(value = "/testRequestMapping")
    public String testRequestMapping() {
    //返回的字符串是去掉视图前缀和后缀的文件名
    //比如说在某一路径下的test.html文件,只需要返回test即可跳转到该页面
    //在springMVC.xml配置文件中设置视图前后缀
    return "test";
    }

    }
    跳转路径设置如下(这里我们使用了thymeleaf来管理路径)

    <a th:href="@{/testRequestMapping}">测试RequestMapping注解</a><br>
    跳转结果

    可以看到地址栏和我们设置的value属性一样。

    标识在类上时

    如果我们在类上设置一个RequestMapping,及取消上面代码中RequestMapping的注释,那么跳转的地址更改如下

    <a th:href="@{/web/testRequestMapping}">测试RequestMapping注解</a><br>
    在类上标记了之后,相当于这一个类中所有的路径前面都加上了类上所标记的路径。

    value属性
    value属性通过请求的请求地址匹配请求映射,value属性可以是一个字符串类型的数组,表示该请求映射能够匹配多个请求地址所对应的请求。

    @RequestMapping(value = {"/testRequestMapping", "/test"})
    public String test() {
    return "test";
    }
    value的值为多个时,表示从这几个路径都可以访问到这一个页面。

    method属性
    method属性通过请求的请求方式(get或post)匹配请求映射,表示该请求能匹配的请求方式,如果不设置method属性,就表示不以请求方式为访问的限制条件。当满足value属性设置的路径但不满足method设置的请求方式时就会报错。

    @RequestMapping(value = {"/testRequestMapping", "/test"},
    method = {RequestMethod.GET, RequestMethod.POST}
    )
    public String test() {
    return "test";
    }
    params属性
    params属性通过请求参数匹配请求映射,@RequestMapping注解的params属性是一个字符串类型的数组,可以通过四种表达式设置请求参数。

    (1)"param":要求请求映射所匹配的请求必须携带param请求参数。

    (2)"!param":要求请求映射所匹配的请求必须不能携带param请求参数。

    (3)"param=value":要求请求映射所匹配的请求必须携带param请求参数且param=value。

    (4)"param!=value":要求请求映射所匹配的请求必须携带param请求参数但是param!=value。

    例如我们在访问路径上面设置传递过去的访问参数

    <a th:href="@{/web/testRequestMapping(username='HLJ',password='654321')}">测试RequestMapping注解false</a><br>
    <a th:href="@{/web/testRequestMapping(username='JLH',password='123456')}">测试RequestMapping注解true</a><br>
    接收方法如下

    @RequestMapping(value = {"/testRequestMapping", "/test"},
    method = {RequestMethod.GET, RequestMethod.POST},
    params = {"username=JLH","password!=654321"}
    )
    public String test() {
    return "test";
    }
    这样就表示当username和password都满足条件的时候才会跳转成功。

    headers属性
    headers属性通过请求的请求头信息匹配请求映射,@RequestMapping注解的headers属性是一个字符串类型的数组,可以通过四种表达式设置请求头信息和请求映射的匹配关系。

    "header":要求请求映射所匹配的请求必须携带header请求头信息。

    "!header":要求请求映射所匹配的请求必须不能携带header请求头信息。

    "header=value":要求请求映射所匹配的请求必须携带header请求头信息且header=value。

    "header!=value":要求请求映射所匹配的请求必须携带header请求头信息且header!=value。

    访问地址

    <a th:href="@{/testParamsAndHeaders}">测试headers</a><br>
    接收设置

    @RequestMapping(value = "/testParamsAndHeaders",
    headers = {"Host=localhost:8080","Accept-Language=zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6"})
    public String testParamsAndHeaders() {
    return "test";
    }
    通过查看网页的请求标头可以发现如下信息

    这里我们通过Host和Accept-Language来设置headers属性进行测试,只要标头的信息和headers中的匹配,就能够访问成功。

    ant风格路径
    ?:表示任意的单个字符。

    *:表示任意的0个或多个字符。

    **:表示任意的一层或多层目录,在使用**时,只能使用/**/xxx的方式。

    接收路径设置

    @RequestMapping(value = "/a?a/testAnt")
    public String testAnt1() {
    return "test";
    }

    @RequestMapping(value = "/a*a/testAnt")
    public String testAnt2() {
    return "test";
    }

    @RequestMapping(value = "/**/testAnt")
    public String testAnt3() {
    return "test";
    }
    访问路径设置

    <a th:href="@{/a1a/testAnt}">使用?(一个问号匹配单个字符)</a><br>
    <a th:href="@{/a1123123123a/testAnt}">使用*(开头和结尾的字符匹配即可)</a><br>
    <a th:href="@{/tqwe/testAnt}">使用**(多目录都可以,只要最后是testAnt)</a><br>
    因为springMVC支持ant风格的路径,所以上面的路径都能被接收到。

    路径占位符
    当我们要把某些数据通过路径的方式传输到服务器时,原始的方式是/路径?username=123&password=321,而现在可以改写成:/路径/username=123/password=321,并且可以通过在RequestMapping注解的value属性中设置占位符获取传输的数据,通过@PathVariable赋值给形参。

    访问路径设置

    <a th:href="@{/testPath/JLH/123456}">测试占位符</a><br>
    设置占位符

    @RequestMapping(value = "/testPath/{username}/{password}")
    public String testPath(@PathVariable("id") Integer id, @PathVariable("username") String username) {
    System.out.println("id:" + id);
    System.out.println("username:" + username);
    return "test";
    }
    这样就可以很容易的获取到通过路径传递过来的参数。
    ————————————————
    版权声明:本文为CSDN博主「知道什么是码怪吗?」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_41746479/article/details/123669495

    @getMapping与@postMapping是组合注解。

    @getMapping = @requestMapping(method = RequestMethod.GET)。

    @postMapping = @requestMapping(method = RequestMethod.POST)。
    ————————————————
    版权声明:本文为CSDN博主「出迷佬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_36261424/article/details/114826584

  • 相关阅读:
    SQL入门学习4-复杂查询
    SQL入门学习3-数据更新
    SQL入门学习2-聚合与排序
    SQL入门学习1-查询基础
    SQL入门学习0-数据库与SQL
    Exp9 20155218 Web安全基础实践
    20155218《网络对抗》Exp8 Web基础
    # 20155218 徐志瀚 EXP7 网络欺诈
    Exp6 20155218 信息搜集与漏洞扫描
    20155218《网络对抗》MSF基础应用
  • 原文地址:https://www.cnblogs.com/ExMan/p/16379643.html
Copyright © 2020-2023  润新知