Spring MVC:@RequestMapping

news2024/11/23 21:25:46

Spring MVC

  • @RequestMapping
    • 属性

在这里插入图片描述

@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 时,访问失败。结果如图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/938129.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Mybatis】关联关系映射表对象之间的关系

目录 ​编辑 1.概述 ( 1 ) 介绍 2.一对一关联映射 2.1数据库表连接&#xff1a; 2.2配置文件&#xff1a; 2.3生成自动代码 2.4 编写测试 3. 一对多关联映射 4.多对多关联映射 1.概述 ( 1 ) 介绍 关联关系映射是指在数据库中&#xff0c;通过定义表之间的关联关系…

C#,数值计算——调适数值积分法(adaptive quadrature)的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// 调适数值积分法 /// adaptive quadrature /// </summary> public class Adapt { private double x1 { get; } 0.942882415695480; private …

什么是透明度(opacity)和RGBA颜色?它们有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 透明度&#xff08;Opacity&#xff09;⭐ RGBA颜色⭐ 区别⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个…

系列十三、idea创建文件自动生成作者信息

File>Settings>Editor>File and Code Templates>Includes>File Header /*** Author : 一叶浮萍归大海* Date: ${DATE} ${TIME}* Description: */

【Go 基础篇】Go语言数组内存分析:深入了解内部机制

在Go语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储一系列相同类型的元素。虽然数组在应用中非常常见&#xff0c;但了解其在内存中的存储方式和分配机制仍然是一个重要的课题。本文将深入探讨Go语言数组的内存分析&#xff0c;揭示数组在内存中的布局和分配…

抖音艺术签名小程序源码/艺术签名设计小程序源码/字节跳动小程序开发

最近很火的抖音艺术签名小程序源码&#xff0c;这是一款艺术签名设计小程序源码&#xff0c;字节跳动小程序开发&#xff0c;之适用于字节系小程序。介意请绕过&#xff01; 下载地址&#xff1a;https://bbs.csdn.net/topics/616145725

好用的可视化大屏适配方案

1、scale方案 优点&#xff1a;使用scale适配是最快且有效的&#xff08;等比缩放&#xff09; 缺点&#xff1a; 等比缩放时&#xff0c;项目的上下或者左右是肯定会有留白的 实现步骤 <div className"screen-wrapper"><div className"screen"…

你不知道的宝藏合金:高熵合金

高熵合金&#xff08;High-entropy alloys&#xff09;简称HEA&#xff0c;是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多理想的性质&#xff0c;因此在材料科学及工程上相当受到重视。 传统合金是以1~2种金属为主&#xff0c;并通过添加特定的少…

Redis全局命令

"那篝火在银河尽头~" Redis-cli命令启动 现如今&#xff0c;我们已经启动了Redis服务&#xff0c;下⾯将介绍如何使⽤redis-cli连接、操作Redis服务。客户端与服务端交互的方式有两种: ● 第⼀种是交互式⽅式: 后续所有的操作都是通过交互式的⽅式实现&#xff0c;…

C++三大质数筛法

什么是质数&#xff1f; 质数是指在大于1的自然胡中&#xff0c;除了1和它本身以外不再有其他因数的自然数。、 一、朴素筛法 时间复杂度&#xff1a; 优化前&#xff1a;O() 优化后&#xff1a;O() 优化前代码 //题目&#xff1a;输入正整数n&#xff0c;输出n以内的所…

volatile 关键字详解

目录 volatile volatile 关键用在什么场景下&#xff1a; volatile 关键字防止编译器优化&#xff1a; volatile 是一个在许多编程语言中&#xff08;包括C和C&#xff09;用作关键字的标识符。它用于告诉编译器不要对带有该关键字修饰的变量进行优化&#xff0c;以确保变量在…

TCP学习笔记

最近面试&#xff0c;问TCP被问住了&#xff0c;感觉背八股背了印象不深刻&#xff0c;还是总结一些比较好。 如果有写错的&#xff0c;欢迎批评指正。 参考&#xff1a;https://www.xiaolincoding.com/network/3_tcp/tcp_interview.html#tcp-%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8…

3. 数据操作、数据预处理

3.1 N维数组 ① 机器学习用的最多的是N维数组&#xff0c;N维数组是机器学习和神经网络的主要数据结构。 3.2 创建数组 ① 创建数组需要&#xff1a;形状、数据类型、元素值。 3.3 访问元素 ① 可以根据切片&#xff0c;或者间隔步长访问元素。 ② [::3,::2]是每隔3行、2列…

WebGL uniform变量、gl.getUniformLocation、gl.uniform4f及其同族函数相关介绍

目录 uniform变量命名规范 获取 uniform 变量的存储地址 gl.getUniformLocation 向uniform变量赋值 gl.uniform4f ​编辑 gl.uniform4f()的同族函数 demo&#xff1a;点击webgl坐标系的四个象限绘制各自不同颜色的点 uniform变量命名规范 var FSHADER_SOURCE uniform vec4…

pandas由入门到精通-数据清洗-扩展数据类型

pandas-02-数据清洗&预处理 扩展数据类型1. 传统数据类型缺点2. 扩展的数据类型3. 如何转换类型文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、异常值处理,数据类型统计,分…

深入URP之Shader篇14: GPU Instancing

GPU Instancing 必须是同一个模型&#xff0c;材质也必须相同&#xff0c;但材质的参数可以不同&#xff08;使用MaterialPropertyBlock指定&#xff09;&#xff0c;然后基于一个Instanced Draw Call&#xff0c;一次性绘制多个模型。 参考&#xff1a;https://docs.unity3d.…

整合SSM:Mybatis层

SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架集由Spring、MyBatis两个开源框架整合而成.为了加深记忆学习,也为了后续资源方便使用.所以决定就对SSM做一个整合,首先是Mybatis层。 思路&#xff1a; 1.开发环境 基本环境&#xff1a; IDEA MySQL 8.0.22 Tomcat 9…

java实现生成RSA公私钥、SHA256withRSA加密以及验证工具类

前言&#xff1a; RSA属于非对称加密。所谓非对称加密&#xff0c;需要两个密钥&#xff1a;公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是一对&#xff0c;如果用公钥对数据加密&#xff0c;那么只能用对应的私钥解密。如果用私钥对数据加密&#xff0c;只能用对应的公…

android系统启动流程之zygote(Native)启动分析

zygote有一部分运行在native,有一部分运行在java层&#xff0c;它是第一个进入java层的进程 zygote在启动时&#xff0c;在init.${ro.zygote}.rc脚本中&#xff0c;里面描述了zygote是如何被启动的&#xff0c; 当init进程解析到zygote.rc文件时&#xff0c;将根据解析出来的命…

蓝桥杯数论必考算法------快速幂

快速幂 目录 快速幂一.暴力解法 O(n∗b) 会TLE二.快速幂解法 O(n∗logb)2.1快速幂之迭代版 O(n∗logb)2.2快速幂之递归版 O(n∗logb) 三&#xff1a;快速幂练习(快速幂求逆元) 一.暴力解法 O(n∗b) 会TLE #include<iostream> using namespace std; int main() {int n;cin…