技术文章

Spring MVC:@RequestMapping

啊Q老师

An editor at Blogzine


  • 2023-08-28
  • 25天前
  • 1.0w
  • 20 Views
  • 100

在这里插入图片描述

@RequestMapping

@RequestMapping, 是 Spring Web 应用程序中最常用的注解之一,主要用于映射 HTTP 请求 URL 与处理请求的处理器 Controller 方法上。使用 @RequestMapping 注解可以方便地定义处理器 Controller 的方法来处理不同的 HTTP 请求,从而实现 Web 应用程序的路由功能。

@RequestMapping 注解可用于方法级别和类级别
方法级别上使用 @RequestMapping 注解:将请求 URL 与特定的处理器 Controller 方法进行映射
类级别上使用 @RequestMapping 注解:将请求 URL 与整个处理器 Controller 类进行映射

简单示例:
在方法级别上使用 @RequestMapping 注解

//原来案例
package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexDemo {

    @RequestMapping("/index")
    public String index(){
        return "index"; //返回对应页面文件名
    }
}

结果如图:
在这里插入图片描述

在类级别上使用 @RequestMapping 注解

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/index") //类级别使用该注解,相当于请求地址上增加一个父目录
@Controller
public class IndexDemo {

    @RequestMapping("/index") //子目录
    public String index(){
        return "index"; //返回对应页面文件名
    }
}

结果如图(区别在于请求 URL ):
在这里插入图片描述

属性

@RequestMapping 注解属性

一、value:指定请求地址

1.可以是相对路径或绝对路径

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexDemo {
    //1.可以指定为具体值
    @RequestMapping("/index1")
    public String index1(){
        return "index"; //返回对应页面文件名
    }
}

结果如图:
在这里插入图片描述

2.可以是 URL Template 模式

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class IndexDemo {
    //2.可以指定为含有变量或正则表达式的一类值(URL Template)
    @RequestMapping("/index2/{id}")
    //@PathVariable 注解的 value 值需要与占位符中的变量保持一致
    public String index2(@PathVariable(value = "id") int ids){
        System.out.println(ids);
        return "index";
    }
}

结果如图:
在这里插入图片描述
在这里插入图片描述

二、method:指定请求方法

可以是 GET、POST、PUT、DELETE 等 HTTP 方法,默认自动匹配 GET 或 POST 请求

如图:指定请求方法为 GET
在这里插入图片描述

三、consumes:指定请求 consumes ,即指定请求所接受的媒体类型(Content-Type)

简单示例:
首先,创建一个 accessing.jsp

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2023/7/18
  Time: 12:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <h2>访问成功!</h2>
</body>
</html>

然后,在 index.jsp 中添加一个 form 表单

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <body>
        <h2>Hello World</h2>
        <form action="${pageContext.request.contextPath}/consumes" method="post">
            <input type="text" value="spring mvc">
            <input type="submit" value="提交">
        </form>
    </body>
</html>

接着,属性 consumes 指定请求的内容类型为 text/html

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class IndexDemo {
    //1.可以指定为具体值
    @RequestMapping("/index1")
    public String index1(){
        return "index"; //返回对应页面文件名
    }

    //consumes 限制内容类型为 text/html 才接受请求处理,其余的会报错:HTTP状态 415 - 不支持的媒体类型
    @RequestMapping(value = "/consumes",method = RequestMethod.POST,consumes = "text/html")
    public String consumes(){
        System.out.println("访问成功!");
        return "accessing";
    }
}

最后,测试结果
1.打开 index.jsp
在这里插入图片描述

2.点击提交,跳转到 accessing.jsp
在这里插入图片描述
原因:consumes 属性指定接收内容类型为 text/html ,但如图请求头中真正的类型为 application/x-www-form-urlencoded ,与之不匹配,故报错HTTP状态 415 - 不支持的媒体类型

解决:将 consumes = “text/html” 改为 consumes = “application/x-www-form-urlencoded” 或者删除 consumes 属性即可

四、produces:指定请求 produces ,即指定响应的媒体类型(Content-Type)

接着上面的示例,将 consumes 属性改为 produces 属性
在这里插入图片描述

结果如图:
在这里插入图片描述
注:

  1. produces 属性指定的响应类型,当请求头的 Accept 的类型中包含即可成功响应
  2. Accept 中的 /;q=0.8 类型表示可以接收任何类型,权重系数0.8指若前几种类型不能正常接收,则根据响应的数据类型进行自动分析匹配处理

五、params:指定请求参数

可以是查询参数或表单参数,指定参数后必须包含这些参数才接收处理

简单示例:
首先,在 index.jsp 中再添加两个 input 标签,并添加 name 参数和参数值

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
    <body>
        <h2>Hello World</h2>
        <form action="${pageContext.request.contextPath}/consumes" method="post">
            <%-- name值为对应的参数 --%>
            <input type="text" name="data" value="" />
            <input type="text" name="day" value="" />
            <input type="submit" value="提交">
        </form>
    </body>
</html>

接着,成功访问跳转的 accessing.jsp 内容如下

<%--
  Created by IntelliJ IDEA.
  User: dell
  Date: 2023/7/18
  Time: 12:54
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
    <h2>访问成功!</h2>
</body>
</html>

然后,属性 params 指定表单参数或参数条件

package cn.edu.springmvcdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class IndexDemo {
    //1.可以指定为具体值
    @RequestMapping("/index1")
    public String index1(){
        return "index"; //返回对应页面文件名
    }

    //params 指定参数必须有 "data","day" ,而且 "day=10" 才能访问成功(条件可以为 = 、 != )
    @RequestMapping(value = "/consumes",method = RequestMethod.POST,params = {"data","day=10"})
    public String consumes(){
        System.out.println("访问成功");
        return "accessing";
    }
}

最后,测试结果
1.当 day=1 时,访问失败
在这里插入图片描述
在这里插入图片描述

2.当 day=10 时,访问成功
在这里插入图片描述
在这里插入图片描述

六、headers:指定请求头

可以是特定的请求头信息,指定请求头后必须包含这些请求头信息才接收处理

请求头信息( Request Headers )
在这里插入图片描述

接着上面的示例,将 params 属性改为 headers 属性,并指定请求头信息(以 Accept-Language: zh-CN,zh;q=0.9 的请求头信息为例)
在这里插入图片描述
注:headers 属性值以键值对形式表示,用等号而不是冒号

当信息 zh-CN 改为 en-US 时,访问失败。结果如图:
在这里插入图片描述

版权声明:

本文为[啊Q老师]所创,转载请带上原文链接,感谢

https://blog.csdn.net/qq_56886142/article/details/131756909


评论数 0



留下回复

如果您是个网络喷子或者键盘侠,那么建议您多看少说。