ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

@RequestMapping属性设置

2021-10-09 12:57:57  阅读:163  来源: 互联网

标签:RequestMapping value method params 设置 请求 public 属性


RequestMapping属性

  • 控制器中有多个方法对应一个请求的情况

    @Controller
    public class HelloController {
        @RequestMapping("/")
        public String index(){
            return "index";
        }
    
        @RequestMapping("/")
        public String getTarget(){
            return "target";
        }
    }
    

    此时服务器会报500的错误,说明以上这种情况是不可行的

  • RequestMapping注解标识的位置

    此注解可以标识在类上,也可以表示在方法上,实际开发过程中,很容易出现多个方法对应同一个请求名的情况,这个方法可以解决

    @Controller
    @RequestMapping("/hello")
    public class HelloController {
        @RequestMapping("/")
        public String index(){
            return "index";
        }
    	//此时访问target时,需要将路径设置为/hello/target
        @RequestMapping("/target")
        public String getTarget(){
            return "target";
        }
    }
    
  • RequestMapping设置value属性

    在这里插入图片描述

    可以看到value属性是一个字符串数组,这也就意味着可以设置多个value属性

    通过以下测试,我们发现两个跳转按钮都可以转发到success页面,这就说明value属性可以设置多个,但只要满足一个即可,相当于一个房间有了多扇门

    @Controller
    public class RequestMappingController {
        @RequestMapping(value = {"/value","/test"})
        public String valueTest(){
            return "success";
        }
    }
    
    <!DOCTYPE html>
    <html lang="en"  xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
    </head>
    <body>
    <h1>首页</h1>
    <a th:href="@{/test}">跳转--->test</a> <br>
    <a th:href="@{/value}">跳转--->value</a>
    </body>
    </html>
    
  • RequestMapping设置method属性

    method属性是一个RequestMethod数组,也是可以设置多个值,通过请求的请求方式(get或post)匹配请求映射,如果不设置的话默认是不将method作为条件过滤

    @Controller
    public class RequestMappingController {
        @RequestMapping(
                value = {"/value","/test"},
            	//设置method属性为get
                method = {RequestMethod.GET}
        )
        public String valueTest(){
            return "success";
        }
    }
    
    <body>
    <h1>首页</h1>
    <a th:href="@{/test}">跳转--->test</a> <br>
    <a th:href="@{/value}">跳转--->value</a> <br>
    <!--get方法-->
    <a th:href="@{/test}">跳转--->test.get</a> <br>
    <!--post方法-->
    <form th:action="@{test}" method="post">
        <input type="submit" value="提交">
    </form>
    </body>
    

    通过以上测试发现get请求可以正常跳转,而表单提交设置为post会报405错误:Request method ‘POST’ not supported

    在这里插入图片描述

    我们可以看出method属性还可以设置其他的值,比如delete,put等,常用的请求方式有get,post,put,delete

    但是在表单中method属性只能设置为post或者get,如果设置为其他值,系统会默认他是get请求

    我们还可以使用RequestMapping的派生注解来代替method=?

    • @GetMapping:相当于method=get
    • @PostMapping:相当于method=post
    • @PutMapping:相当于method=put
    • @DeleteMapping:相当于method=delete
  • RequestMapping设置params属性

    params属性值有以下四种写法

    • params:请求参数带有params
    • !params:请求参数不带有params
    • params=value:请求参数params值为value
    • params=!value:请求参数params值不为value
    @Controller
    public class RequestMappingController {
        @RequestMapping(
                value = {"/value","/test"},
                params = {"!username"}
        )
        public String valueTest(){
            return "success";
        }
    }
    
    <!--thymeleaf中以下写法相当于 test?username=admin&password=123-->
    <a th:href="@{/test(username=admin,password=123)}">跳转--->test.params</a> <br>
    

    我们设置params属性值不带有username,发起请求时服务器会报400错误:Parameter conditions “!username” not met for actual request parameters: username={admin}, password={123}

    这里需要注意的是如果设置了多个属性,必须同时满足才可以通过

  • RequestMapping设置header属性

    这个一般不是很常用,和params用法类似,我们都知道一次请求,会有请求头、请求体、空行一起发送给服务器,这个head属性设置的是请求头数据

    @Controller
    public class RequestMappingController {
        @RequestMapping(
                value = {"/value","/test"},
            	//设置请求头参数为localhost:8081,我们知道tomcat端口为8080
                headers = {"Host=localhost:8081"}
        )
        public String valueTest(){
            return "success";
        }
    }
    

    当条件不符合时,会报404错误

标签:RequestMapping,value,method,params,设置,请求,public,属性
来源: https://blog.csdn.net/Yellow_Star___/article/details/120668851

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有