当前位置: 首页 > news >正文

Spring MVC @Controller和@RequestMapping注解

@Controller 注解

@Controller 注解可以将一个普通的 Java 类标识成控制器(Controller)类,示例代码如下。

package net.biancheng.controller;
import org.springframework.stereotype.Controller;
@Controller
public class IndexController {// 处理请求的方法
}

Spring MVC 是通过组件扫描机制查找应用中的控制器类的,为了保证控制器能够被 Spring MVC 扫描到,我们还需要在 Spring MVC 的配置文件中使用 <context:component-scan/> 标签,指定控制器类的基本包(请确保所有控制器类都在基本包及其子包下),示例代码如下

<!-- 使用扫描机制扫描控制器类,控制器类都在net.biancheng.controller包及其子包下 -->
<context:component-scan base-package="net.biancheng.controller" />

@RequestMapping 注解

@RequestMapping 注解是 Spring MVC 中最常被用到的注解之一。它通常被标注在控制器方法上,负责将请求与处理请求的控制器方法关联起来,建立映射关系。

Spring MVC 的前端控制器(DispatcherServlet)拦截到用户发来的请求后,会通过 @RequestMapping 注解提供的映射信息找到对应的控制器方法,对这个请求进行处理。

@RequestMapping 注解的使用方式

@RequestMapping 既可以标注在控制器类上,也可以标注在控制器方法上。

1. 修饰方法

当 @RequestMapping  注解被标注在方法上时,value 属性值就表示访问该方法的 URL 地址。当用户发送过来的请求想要访问该 Controller 下的控制器方法时,请求路径就必须与这个 value 值相同,示例代码如下

@Controller
public class HelloController {@RequestMapping("/login")public String welcome() {return "login";}
}

2. 修饰类

当 @RequestMapping 注解标注在控制器类上时,value 属性的取值就是这个控制器类中的所有控制器方法 URL 地址的父路径。也就是说,访问这个 Controller 下的任意控制器方法都需要带上这个父路径。

@Controller
@RequestMapping(value = "/springmvc")
public class HelloController {@RequestMapping("/login")public String welcome() {return "login";}
}

在上面的控制类中,用户想要访问 HelloController 中的 welcome() 方法,请求的地址就必须带上父路径“/springmvc”,即请求地址必须为“/springmvc/login”。

@RequestMapping 注解的属性

@RequestMapping 注解中提供了多个可用属性,下面我们就对其中几个比较常用的属性进行介绍。

1. value 属性

在 @RequestMapping 注解中,value 属性用来设置控制器方法的请求映射地址。所有能够匹配到该请求映射地址的请求,都可以被该控制器方法处理,示例代码如下。

@RequestMapping(value = "/register")

value 属性是 @RequestMapping 注解的默认属性,如果我们在 @RequestMapping 注解中只设置了一个 value 属性,则该属性名可以被省略。value 属性的取值是一个字符串类型的数组,表示该控制器方法可以匹配多个请求地址

@RequestMapping( value = {"/register", "/login"})
public String success() {return "success";
}

2. name 属性

name 属性相当于方法的注释,用于解释这个方法是用来干什么的,使方法更易理解。

例如,下面的代码表示 getUsers() 方法是一个用来获取用户信息的控制器方法。

@RequestMapping(value = "toUser",name = "获取用户信息")
public String getUsers() {……
}

3. method 属性

method 属性用来设置控制器方法支持的请求方式。如果一个控制器方法没有设置 @RequestMapping 注解的 method 属性,则说明该控制器方法支持全部请求类型,可以处理所有类型的请求。
method 属性的取值是一个 RequestMethod 类型的数组,表示一个控制器方法支持多种方式的请求,常用的请求方式有 GET、POST、DELETE、PUT 等。

例如,控制器方法只支持 GET 方式的请求,代码如下。

@RequestMapping(value = "/toUser",method = RequestMethod.GET)

 我们也可以为同一个控制器方法指定支持多种类型的请求。例如,一个方法既支持 GET 方式的请求,也支持 POST 方式的请求,代码如下。

@RequestMapping(value = "/toUser",method = {RequestMethod.GET,RequestMethod.POST})

4. params 属性

params 属性用于指定请求中的参数,只有当请求中携带了符合条件的参数时,控制器方法才会对该请求进行处理。

序号表达式含义
 "param"请求中必须携带名为 param 的参数
"!param"与表达式 ① 的含义完全相反,请求中不能携带名为 param 的参数
"param=value"请求中必须携带名为 param 的参数,且参数的取值必须为:value
"param!=value"与表达式 ③ 的含义完全相反,请求中不能携带参数:param = value。

params 属性的取值是一个字符串类型的数组,表示只有请求中同时携带了 params 属性指定的全部参数时,控制器方法才会对该请求进行处理。
例如

@RequestMapping(value = "/testParam", params = {"name=zhang", "age=23"})
@ResponseBody
public String testParam() {return "success";
}

以上代码表示,只有当请求中同时携带 name 和 age两个请求参数,且参数值必须分别为 “zhang” 和“23”时,控制器方法 testParam() 才会对该请求进行处理 。

5. headers 属性

headers 属性用于设置请求中请求头信息,只有当请求中携带指定的请求头信息时,控制器方法才会处理该请求。

序号表达式含义
 "header"请求必须携带请求头信息:header 
"!header"与表达式 ①  的含义完全相反,请求中不能携带请求头信息:header
"header=value"请求中必须携带请求头信息:header=value 。
"header!=value"与表达式 ③ 的含义完全相反,请求中不能携带请求头信息:header=value。

header 属性是一个字符换类型的数组,表示只有当请求同时携带数组中规定的所有头信息时,控制器方法才会对该请求进行处理。 只有当请求的头Referer信息中包含相关内容才会处理该请求。

相关文章:

Spring MVC @Controller和@RequestMapping注解

Controller 注解 Controller 注解可以将一个普通的 Java 类标识成控制器&#xff08;Controller&#xff09;类&#xff0c;示例代码如下。 package net.biancheng.controller; import org.springframework.stereotype.Controller; Controller public class IndexController …...

软件架构之前后端分离架构服务器端高并发演进之路

软件架构之前后端分离架构&服务器端高并发演进之路 前后端分离架构从业务角度从质量属性从性能角度 服务器端关于不同并发量的演进之路1. 单体架构2. 第一次演进&#xff1a;应用服务器和数据库服务器分开部署3. 第二次演进&#xff1a;引入本地缓存和分部署缓存4. 第三次演…...

第4节-PhotoShop基础课程-Ps格式

文章目录 前言1.像素认识2. 图层认识1.图层有上下前后遮挡关系2.橡皮檫可以擦掉选择图层的像素3.新建图层4.新建删除图层 3. 分辨率的理解4. 图片格式A 前言 本章主要介绍PS常用格式 1.像素认识 下面每个格子就是像素 2. 图层认识 1.图层有上下前后遮挡关系 2.橡皮檫可以擦…...

C语言malloc函数学习

malloc的全称是memory allocation&#xff0c;中文叫动态内存分配&#xff0c;用于申请一块连续的指定大小的内存块区域&#xff0c;以void*类型返回分配的内存区域地址&#xff1b; 函数原型为void *malloc(unsigned int size)&#xff0c;在内存的动态存储区中分配一个长度为…...

从零开始学习deepsort目标追踪算法----原理和代码详解

目录 1.目标追踪的主要步骤 2、传统sort算法的流程 3.Deepsort算法流程 4、目标追踪整体代码 4.1 Configs文件目录下&#xff1a; 4.2 deep_sort/deep_sort/deep目录下&#xff1a; 4.3 deep_sort/deep_sort/sort目录下&#xff1a; 运行demo&#xff1a; DeepSORT&…...

第三章 LInux多线程开发 3.1-3.5线程创建 终止 分离

创建线程&#xff1a;&#xff08;好好记住 可能会叫写代码&#xff09; 一般情况下,main函数所在的线程我们称之为主线程&#xff08;main线程&#xff09;&#xff0c;其余创建的线程称之为子线程。 程序中默认只有一个进程&#xff0c;fork()函数调用&#xff0c;2进行 程序…...

空间曲线的参数方程

空间曲线的参数方程 二维直线 经过一点 P ( x 0 &#xff0c; y 0 ) P(x_0&#xff0c;y_0) P(x0​&#xff0c;y0​)的方向向量为 n ( c o s θ &#xff0c; s i n θ ) n(cos\theta&#xff0c;sin\theta) n(cosθ&#xff0c;sinθ)的直线参数方程为&#xff1a; [ x y …...

非华为机型如何体验HarmonyOS鸿蒙系统 刷写HarmonyOS鸿蒙GSI系统以及一些初步的bug修复

最近很多视频网站有非华为机型使用HarmonyOS鸿蒙系统的演示。其实大都是刷了HarmonyOS鸿蒙系统gsi系统。体验还可以。有些刷入后bug较多。那么这些机型是如何刷写gsi&#xff1f;可以参考我以往帖子 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统_gsi刷…...

Flutter 生成小程序的混合 App 实践

一、背景 微信小程序发展的越来越快,目前小程序甚至取代了大部分 App 的生态位,公司的坑位不增反降,只能让原生应用开发兼顾或换岗进行小程序的开发。 以我的实际情况来讲,公司应用采用的 Flutter 框架,同样的功能不可避免的就会存在 Flutter 应用开发和微信小程序开发兼…...

利用 Python-user-agents 解析 User_Agent

利用 Python-user-agents 解析 User_Agen 需求分析 近期在尝试做一个登录日志的功能&#xff0c;及用户登录成功后我在后台进行一个用户的登录记录&#xff0c;两种解决方案&#xff1a; 由前端得到用户的手机型号&#xff0c;我在后台接收后在数据库进行保存使用User_Agent…...

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…...

Mybatis如何给字段起别名?

Mybatis如何给字段起别名&#xff1f; 假如有一个学生表&#xff0c;有一个字段是class&#xff0c;你的实体类变量肯定不能用class&#xff0c;那么如何起别名&#xff1f; 通过以下代码实现 Result(column "class",property "clas")mapper代码 pub…...

php对接AWS S3云存储,上传S3及访问权限问题

首先先下载sdk包 https://docs.aws.amazon.com/zh_cn/sdk-for-php/v3/developer-guide/getting-started_installation.html S3创建存储桶 去安全凭证-》创建访问秘钥 创建的时候会提示&#xff0c;主账号创建不安全&#xff0c;这个时候我们需要创建一个IAM账号来创建秘钥 创…...

java 实现单例模式

单例模式是一种设计模式&#xff0c;用于确保一个类只有一个实例&#xff0c;并提供一种全局访问该实例的方式。在Java中&#xff0c;可以使用多种方式来实现单例模式&#xff0c;下面整理了几种常见的实现方式。 饿汉式单例模式&#xff08;Eager Initialization&#xff09;&…...

minio文件服务器开启https

一、准备证书 你要有https安全证书&#xff0c;我的是适用于nginx的证书 私钥 xxxx.key 公钥 xxxx.pem 二、上传证书到minio服务器 然后看看你的minio docker 有没有把 /root/.minio 挂载在主机上&#xff0c;如果有那么把两个证书文件放在/root/.minio/certs目录里面。…...

每日刷题(回溯法经典问题之子集)

食用指南&#xff1a;本文为作者刷题中认为有必要记录的题目 前置知识&#xff1a;回溯法经典问题之组合 ♈️今日夜电波&#xff1a;想着你—郭顶 1:09 ━━━━━━️&#x1f49f;──────── 4:15 …...

PostgreSQL在进行除法时要注意

背景 整型除以整型&#xff0c;正常情况下当然得到的应该也是整型。数据库也是这么干的。 但是在数据库应用中&#xff0c;通常业务的需求是得到NUMERIC&#xff0c;不能直接把小数干掉。 数据库的行为给用户带来了诸多不便&#xff0c;例如1除以2&#xff0c;如果是整型除法会…...

开开心心带你学习MySQL数据库之第五篇

&#x1f63a;欢迎来到我的博客, 记得点赞&#x1f44d;收藏⭐️留言✍️&#x1f431; &#x1f409;做为一个怪兽&#xff0c;我的目标是少消灭一个奥特曼&#x1f409; &#x1f4d6;希望我写的博客对你有所帮助,如有不足,请指正&#x1f4d6; chatgpt 是否能够代替程序猿?…...

Geotools对geojson的解析

在 GeoTools 中&#xff0c;对 GeoJSON 的支持是通过一个插件来完成的&#xff0c;用户同样可以在 Maven 的 pom.xml 配置文件中添加下述的依赖。 <dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version&…...

【博客701】shell实现保留网络现场:ping失败时执行mtr

shell实现保留网络现场&#xff1a;ping失败时执行mtr 场景 当我们网络出现抖动&#xff0c;到某个目的地ping不通时&#xff0c;我们想知道路径上哪里出现问题时可以在那时候执行mtr并保留下现场以供排查 实现&#xff1a;ping_and_mtr.sh #!/bin/bash# 定义要ping的IP地址列…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?

Pod IP 的本质与特性 Pod IP 的定位 纯端点地址&#xff1a;Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址&#xff08;如 10.244.1.2&#xff09;无特殊名称&#xff1a;在 Kubernetes 中&#xff0c;它通常被称为 “Pod IP” 或 “容器 IP”生命周期&#xff1a;与 Pod …...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...