RequestMapping注解以及HiddenHttpMethodFilter过滤

BOSS直聘数据采集、解析处理、分析与可视化实战 招聘和求职是一对永恒的话题,不论什么时候都有招聘或者是求职的需求,找不找得到工作可能最主要的就是匹配度是否高,待遇福利是否诱人,如今互联网的快速发展,找工作的方式早已发生了翻天覆地的变化,从以往的面对面形式的招聘简历投递和面试方式,变成了电子简历网络直接投递、远程面试录用的形式,便捷性大大提升,需求的快速增长,促生了一批互联网招聘类的企业,诸如:51job、BOSS直聘、拉勾网等等,为了能... 阅读详情
一. RequestMapping修饰类

SpringMVC使用@RequestMapping注解为请求处理器指定映射的URL,我们的HelloWorld程序中,@RequestMapping注解是修饰在目标方法上,实际上此注解也可以修饰在类上。

@Controller //表示是一个控制器
@RequestMapping("/hello")
public class HelloWorld {
/**
 * 	sayHello 我们称之为请求处理器的 目标方法,每一个带有@RequestMapping注解的方法都叫做目标方法,能够处理一个URL请求
 * 	@RequestMapping用来映射目标方法请求URL
 * @return
 */
@RequestMapping("/helloworld")
public String sayHello() {
	System.out.println("Hello SpringMVC");
	return "success";
 }
}

上面的程序中,在类上使用@RequestMapping(“/hello”),而在目标方法上使用@RequestMapping(“/helloworld”),那么这个目标方法真实的映射的地址是:/hello/helloworld,所以我们得出结论:

  • @RequestMapping在类定义处:提供了初步的映射请求URL,表示此请求处理器中所有的目标方法都在此URL下访问
  • @RequestMapping在方法处:为方法提供了进一步的映射请求URL。

那么我们的目标方法真实的映射URL信息 = 类定义处映射的URL+方法定义出映射的URL。而且不管是类定义出映射的URL还是方法定义出映射的URL都可以省略第一个/。

二. RequestMapping请求方式

@RequestMapping可以使用method属性指定请求方式,那么指定了请求方式的目标方法表示只能处理指定的请求方式。

/**
	 * 	method=RequestMethod.POST : 表示此处理方法只能够处理POST请求
	 * 	method=RequestMethod.GET : 表示此处理方法只能够处理GET请求
	 * 	method=RequestMethod.DELETE : 表示此处理方法只能够处理DELETE请求
	 * 	method=RequestMethod.PUT : 表示此处理方法只能够处理PUT请求
	 * @return
	 */
	@RequestMapping(value="testMethod",method=RequestMethod.POST)
	public String testMethod() {
		System.out.println("testMethod...");
		return SUCCESS;
	}
三. RequestMapping指定参数和请求头

RequetMapping注解可以使用value映射请求地址,使用method映射请求方法,我们也可以使用params映射请求参数,使用headers映射请求头,如果请求的地址不是value指定的映射地址,那么肯定不会执行相应的请求处理器的目标方法,如果请求方式不是method指定的请求方式,那么也不会执行相应的请求处理器的目标方法,同理,如果没有满足params和headers指定的请求参数和请求头,也不会执行响应的请求处理器的目标方法。

示例一:指定请求参数

/**
	 * 	使用params指定请求参数,因为参数可能有多个,所以使用一个数组来表示
	 * 	params= {"name","age"} : 表示请求参数必须包含name 和  age,否则出现404错误
	 * 	params= {"name=xxx","age"}:表示请求参数必须包含name 和  age,而且name的参数值必须为xxx,否则出现404
	 * 	params= {"name!=xxx","age"}:表示请求参数必须包含name 和  age,而且name的参数值必须不能为为xxx,否则出现404
	 * 	params= {"name=xxx","!age"}:表示请求参数必须包含name,但是不能存在age参数,而且name的参数值必须为xxx,否则出现404
	 * @return
	 */
	@RequestMapping(value="testParams",params= {"name","!age"})
	public String testParams() {
		System.out.println("testParams...");
		return SUCCESS;
	}

示例二:指定请求头,请求头和请求参数是同样的道理

/**
	 * 	使用headers指定请求头,因为请求头可能有多个,所以使用一个数组来表示
	 * 	headers= {"Connection=keep-alive"}:表示必须包含Connection请求头,而且只必须是keep-alive
	 * @return
	 */
	@RequestMapping(value="testHeaders",headers= {"Connection=keep-alive"})
	public String testHeaders() {
		System.out.println("testParams...");
		return SUCCESS;
	}
四. Ant风格路径

Ant风格的通配符支持3中匹配方式:

  • ? 表示匹配一个字符
  • * 表示匹配任意个字符
  • ** 表示匹配多次路径的任意个字符

RequestMapping注解是支持Ant风格的通配符的,而且是唯一支持的一种。表示RequestMapping支持通配符,但只支持Ant风格一种。

示例:

/**
	 * 	
	 * @return
	 */
	//	/testAnt/*/wanbangee  表示请求地址/testAnt/任意字符/wanbangee  比如/testAnt/abc/wanbangee,/testAnt/123/wanbangee,/testAnt/haha/wanbangee 都能够映射成功
	// 	/testAnt/**/wanbangee 表示请求地址/testAnt/任意字符任意路径/wanbangee 比如/testAnt/a/b/c/wanbangee,/testAnt/1/wanbangee,/testAnt/abc/wanbangee
	@RequestMapping("/testAnt/**/wanbangee")
	public String testAnt() {
		System.out.println("testAnt...");
		return SUCCESS;		//SUCCESS是常量被定义好的字符串
	}
五. PathVariable注解

@PathVariable注解时用来映射URL绑定的占位符,是Spring3.0中新增的功能,这个功能在SpringMVC向Rest目挺近的过程中具有里程碑式的意义,通过@PathVariable注解可以将URL中占位符参数绑定要请求处理器的目标方法入参中,URL中{XXX}占位符通过@PathVariable(“XXX”)注解绑定要目标方法的入参中。

/**
	 * 		/testPathVariable/{name}/{age} : 表示会通过url占位符的形式传递两个参数过来,一个是name,另外一个是age
	 * 		处理器的目标方法中使用@PathVariable("name") String name 获取URL占位符中的name参数,并且赋值给目标方法的入参name
	 * 		处理器的目标方法中使用@PathVariable("age")Integer age 获取URL占位符中的age参数,并且赋值给目标方法的入参age
	 * 		
	 * 		请求地址:hello/testPathVariable/jjm/32 会匹配到 /testPathVariable/{name}/{age} ,而且通过URL占位符携带的参数为jjm 和 32 
	 * 
	 * 
	 * @param name
	 * @param age
	 * @return
	 */
	@RequestMapping("/testPathVariable/{name}/{age}")
	public String testPathVariable(@PathVariable("name")String name,@PathVariable("age")Integer age) {
		System.out.println("name:" + name + ",age:" + age);
		System.out.println("testPathVariable....");
		return SUCCESS;
	}
六. HiddenHttpMethodFilter过滤(REST风格URL)

REST:Representational state transfer 叫做资源表现层状态转化,是目前最流行的一种互联网软件架构,Rest结构清晰,符合标准,易于理解,便于扩展,所以目前得到了越多越多的网站使用。转台转化:每次发送一个请求,表示客户端和服务端的一次交互过程,Http协议是一个无状态的协议,即所有的状态都保存在服务器端,因此如果客户想要操作服务器,必须通过某种手段,让服务器端发生状态转化,而这种转化是建立在表现层的,所以就叫做资源表现出状态转化,具体的说,就是在Http协议中,使用get请求来获取资源,使用post请求来新建资源,使用put请求来更新资源,使用delete请求来删除资源 ,http协议中存在get请求和post请求,如果发送put和delete请求呢,SpringMVC可以将post请求转换成put或者delete请求,这就是SpringMVC提供的资源表现层状态转化。所以在我们后续的开发中,不仅仅只有post和get请求了,还存在delete和put请求。

实例:

  • get请求查询数据:/user/1 表示查询ID为1的资源
  • Post请求新增数据:/user表示新增资源
  • Delete请求删除资源:/user/1 表示删除ID为1的资源
  • Put 请求修改资源 :/user/1 表示修改ID为1的资源

现在关键在于如何将post请求转换成delete和put请求呢?SpringMVC提供了响应的解决方案:

  • 配置过滤器 HiddenHttpMethodFilter
  • 发送post请求,携带_method = put 或者_method=delete 表示将post请求转换成put或者delete 请求。
  1. 在web.xml中配置过滤器
<!-- 配置HiddenHttpMethodFilter -->

​	<filter>

​		<filter-name>hiddenHttpMethodFilter</filter-name>

​		<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

​	</filter>

​	<filter-mapping>

​		<filter-name>hiddenHttpMethodFilter</filter-name>

​		<url-pattern>/*</url-pattern>

​	</filter-mapping>
2. 编写请求处理器
/**
  * 	删除
      * @param id
      * @return
        */
        @RequestMapping(value="/user/{id}",method=RequestMethod.DELETE)
        public String deleteById(@PathVariable("id") Integer id) {
        System.out.println("delete...." + id);
        return SUCCESS;
        }
/**
 * 	修改
 * @param id
 * @return
 */
@RequestMapping(value="/user/{id}",method=RequestMethod.PUT)
public String updateById(@PathVariable("id") Integer id) {
	System.out.println("put...." + id);
	return SUCCESS;
}

/**
 * 	新增
 * @return
 */
@RequestMapping(value="/user",method=RequestMethod.POST)
public String insert() {
	System.out.println("post....");
	return SUCCESS;
}

/**
 * 	查询
 * @param id
 * @return
 */
@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
public String selectById(@PathVariable("id") Integer id) {
	System.out.println("get...." + id);
	return SUCCESS;
}
  1. 编写请求页面
<form action="${pageContext.request.contextPath}/hello/user/1" method="post">
		<input type="hidden" name="_method" value="delete">
		<button>test RestFul Delete</button>
	</form>
<br>

<form action="${pageContext.request.contextPath}/hello/user/1" method="post">
	<input type="hidden" name="_method" value="put">
	<button>test RestFul Put</button>
</form>
<br>

<form action="${pageContext.request.contextPath}/hello/user" method="post">
	<button>test RestFul Post</button>
</form>
<br>
<a href="${pageContext.request.contextPath}/hello/user/1">test RestFul Get</a>

现在大家会问到三个问题:

  1. 参数名一定要_method 吗? 一定
  2. 参数值delete或者put有没有大小写的限制? 没有
  3. 可以不使用隐藏域传递_mthod吗? 可以,但是存在问题,使用text显示的话可能会被用户修改,所以建议使用hidden隐藏域
小结

在SpringMVC中有很多对注解的操作,大家要理解注解的用途以及注解属性的作用。

RT-DETR训练自己的数据集(从代码下载到实例测试) 在Windows10上配置CUDA环境教程是百度提出的一种实时目标检测模型。RT-DETR采用了与DETR相同的编码器和解码器结构,但对其进行了大量的优化,在保持较高检测精度的同时,实现了实时目标检测,为目标检测领域提供了一种新的有效解决方案,具有广泛的应用前景,如自动驾驶、智能监控、机器人等领域。以上是RT-DETR官方的论文和代码,详细介绍了RT-DETR的构成和实现。在YOLOv10中也实现了RT-DETR的代码,所以本文使用YOLOv10的项目文件进行RT-DETR的训练和测试。YOLOv10。 阅读详情

相关推荐

python爬虫自动下载网页链接

需求分析 今天遇到一个简单的需求,需要下载澳大利亚电力市场NEM日前市场的发电商报价数据(http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/),页面观感是这样的: Ctrl + F 一下,看到一共有395个zip链接。于是就想着用python爬虫自动下载。这个网页很简单,没有验证码,甚至不需要登录,因此自动下载的pytho...

da_kao_la的博客 1万+

SpringMVC的HiddenHttpMethodFilter详解

详解HiddenHttpMethodFilter将post请求转换为其他请求的。

weixin_47627102的博客 7544

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 542

SpringMVC学习总结(六)RESTful简介HiddenHttpMethodFilter过滤器源码分析使用RESTful风格发送put和delete请求RESTful风格完整案例

ReStateTransfer,表现层资源状态转移。资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。

long3359的博客 1068

动网格-网格重构之铺层(三)

运动区域可以是边界区域 (Boundary Zone),也可以是单元区域 ( Cell Zone)。指定了体网格再生方法后,FLUENT自动地根据运动区域(dynamic zones)的运动来调整内部节点以再生体网格。必须保留至少一层网格。(4)如果边面的法向和运动方向偏角较大,生成的网格扭斜度会比较大铺层算法不适用于边界形状变化较大的情况。(1)体网格再生方法的选择(Smoothing,Layering,Remeshing);(2)适用网格种类:四边形、六面体、三棱柱(网格的分布要服从一定的规则)。

weixin_44386973的博客 2095

LeRobot 宇树人形机器人 G1 部署 GR00T 运动策略

本文详细介绍了Unitree G1人形机器人的完整设置流程。首先通过以太网连接机器人并进行SSH访问,然后配置WiFi网络实现无线连接。在机器人端安装LeRobot软件并运行服务器程序,最后在控制端配置IP地址并运行GR00T移动控制系统。指南涵盖了29自由度和23自由度版本G1机器人的配置方法,支持通过WiFi进行远程策略部署,提供双足行走与平衡控制功能,并详细说明了遥控器操作方式。

2506_90492529的博客 2172

HiddenHttpMethodFilter

HiddenHttpMethodFilter 浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、PUT 等 method 并不支持,spring3.0 添加了一个过滤器,可以将这 些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与 DELETE 请求,该过滤器为 HiddenHttpMethodFilter。 HiddenHttpMethodFilter 的父类是 OncePerRequestFilter,它继承了父类的 doFilterInternal()

前尘忆梦的博客 960

常说的cache机制到底是什么?L1 cache和 L2 cache是什么?

一文带你迅速了解CPU内的cache机制!!图解多核CPU中的多级cache结构。为何有的处理器没有cache?

车载系统攻城狮 5878

SpringMVC之HiddenHttpMethodFilter

浏览器form表单只支持Get和POST请求,而Delete、Put等method并不支持。Spring3.0添加了过滤器HiddenHttpMethodFilter,可以将这些请求转换为标准的http方法,使得支持GET、POST、PUT和DELETE请求 Restful风格URL 一个请求 = 请求签名 + 请求方式 示例: order/1 HTTP GET :得到 id = 1 的 o...

OceanStar的博客 2375

Android功耗系列专题理论之十一:高通QCOM平台待机功耗问题分析方法

本文详细介绍了高通QCOM平台待机功耗问题的分析方法。首先强调测试环境标准化的重要性,包括关闭无线功能、日志记录和非必要传感器。重点分析了硬件连接检查、驱动配置验证、电源管理策略优化等关键步骤。文章详细讲解了射频校准、时钟源/中断分析、子系统状态检查等专业技术方法,并提供了具体的命令行操作示例。此外还介绍了外设拆解、外灌电压测试等硬件排查手段,以及功耗分解板、波形分析等高级诊断技术。最后强调了固件版本验证和环境因素测试的必要性,为工程师提供了系统性的功耗问题排查思路。

772

clock min pulse width检查

高电平脉宽 = clock fall edge到达FF/CK的时间 - clock rise edge到达FF/CK的时间;低电平脉宽 = 下一T clock rise edge到达FF/CK的时间 - clock fall edge到达FF/CK的时间。而required pulse width是根据FF/CK处的transition,根据查找表计算得到的。为什么clock transition越大,会导致required pulse width越大呢?5、 降低clock上的串扰。

芯冰乐 578

SpringBoot之HiddenHttpMethodFilter

默认情况下,表单只能发送GET、POST请求,如果需要发送PUT、DELETE请求呢?SpringBoot通过解决了这一问题。URI 和具体方法的映射关系,都存储在这个属性中SpringBoot之请求映射原理如果存在自定义的 HiddenHttpMethodFilter,则默认的 HiddenHttpMethodFilter 失效。

好记性不如烂笔头 1594

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringMVC_RequestMapping Ant路径,PathVariable注解,HiddenHttpMethodFilter过滤器

qq_44772414的博客 2万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

学习Spring-MVC的第二天

这篇讲的是RequestMapping的映射和HiddenHttpMethodFilter过滤器 @Controller @RequestMapping("indexClassController") public class indexController { @RequestMapping("indexController") public String GOTO() { retu...

u013721254的博客 227

RequestMapping_HiddenHttpMethodFilter 过滤器

很郁闷,这个查了很多资料,就是put与delete还是不好用。 但是看了一个文档后解决了,有些感谢这篇文档:http://blog.youkuaiyun.com/tiberroot/article/details/76615727 一:程序 1.配置过滤器 1 &lt;?xml version="1.0" encoding="UTF-8"?&gt; 2 &lt;web-app xmlns:xsi="ht...

weixin_34381666的博客 162

SpringMVC_RequestMapping_HiddenHttpMethodFilter 过滤器

HTTP 协议四个操作方式 动词 GET 、POST 、PUT 、DELETE。 它们分别对应四种基本操作 : GET来获取资源 POST来新建资源 PUT来更新资源 DELETE来删除资源 Rest 风格的 URL 以 CRUD 为例: 新增: /order POST 修改: /order/1 PUTupdate?id=1 获取:/order/1 GET get?id=1...

独孤欢颜的博客 190

005 RequestMapping_HiddenHttpMethodFilter 过滤器

  很郁闷,这个查了很多资料,就是put与delete还是不好用。   但是看了一个文档后解决了,有些感谢这篇文档:http://blog.youkuaiyun.com/tiberroot/article/details/76615727 一:程序 1.配置过滤器 1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xml...

weixin_30332705的博客 78

Spring MVC @RequestMapping注解

RequestMapping注解既可以修饰方法也可以用来修饰类。 类定义处的该注解相对于根目录,而方法定义处的注解相对于类注解,没有类注解时相对于根目录。 要注意的地方时,在类中路径的编写要以”/”开头,而jsp文件中的请求路径不要“/”开头。 RequestMapping注解有很多参数,其中四个比较常用的是 value 请求路径 method 请求方法 params 请求参数

lyfuci10的博客 1622

8. SpringMVC_RequestMapping_HiddenHttpMethodFilter 过滤器

/** * Rest 风格的 URL. 以 CRUD 为例: 新增: /order POST 修改: /order/1 PUT update?id=1 获取: * /order/1 GET get?id=1 删除: /order/1 DELETE delete?id=1 *  * 如何发送 PUT 请求和 DELETE 请求呢 ? 1. 需要配置 HiddenHttpMethodFilte

hellowindowns的博客 885

SpringMVC——SpringMVC概述、第一个SpringMVC程序、RequestMapping映射、Rest风格介绍

这里写目录标题一、MVC介绍二、SpringMVC简介三、第一个SpringMVC——hello world四、关于hello world的几个细节4.1 如果不指定xml配置文件位置?4.2 url-pattern元素五、RequestMapping映射5.1 RequestMapping映射请求方式5.2 RequestMapping映射请求参数&请求头5.3 RequestMapping支持Ant 路径风格5.4 RequestMapping映射请求占位符PathVariable注解Rest风

weixin_44630656的博客 293

SpringMVC 学习笔记(二)- RequestMapping 映射请求

1. RequestMapping_修饰类 1.1. 简介 @RequestMapping 除了修饰方法, 还可来修饰类 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于 WEB 应用的根目录 1.2. 例子 1.2.1. 创...

0start1的博客 246

SpringMVC篇-@RequestMapping注解

@RequestMapping (1)Spring MVC 使用 @RequestMapping 注解为控制器指定可以处理哪些 URL 请求 (2)DispatcherServlet 截获请求后,就通过控制器上 @RequestMapping 提供的映射信息确定请求所对应的处理方法 使用@RequestMapping映射请求 @RequestMapping 除了修饰方法, 还可来修饰类 类定义处:提供初步的请求映射信息。相对于 WEB 应用的根目录 方法处: 提供进一步的细分映射信息。 相对于类定义处的

cV展示的学习园 282

httpservletrequest 设置请求头_SpringMVC RequestMapping请求数据响应数据

SpringMVC是一种轻量级的、基于MVC的Web层应用框架。通过一套 MVC 注解,让 POJO 成为处理请求的控制器,而无须实现任何接口。采用了松散耦合可插拔组件结构,比其他 MVC 框架更具扩展性和灵活性。优点:  1、天生与Spring框架集成,如:(IOC,AOP)  2、支持Restful风格  3、支持灵活的URL到页面控制器的映射  4、非常容易与其他视图技术集成,如:...

weixin_39957271的博客 5123

使用requestmapping进不去控制器_@RequestMapping用法详解

一、@RequestMapping 简介在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,相当于Servlet中在web.xml中配置<servlet> <servlet-name>servletName</servlet-name> <servlet-class&g...

weixin_39933026的博客 1245

@RequestMapping注解中的method属性

method属性 method属性用来指示方法仅仅处理哪些http请求方式,可支持一个或多个请求方式。 @RequestMapping("/hello",method=RequestMethod.POST)表示只支持POST请求方式。 @RequestMapping("/hello",method={RequestMethod.POST,RequestMethod.GET})表示只支持POST和GET请求方式。 如果没有指定method属性,则请求处理方法可以处理任意请求处理方式。 注意: 由于form表单

weixin_45055846的博客 7246
上一篇: AOP的简单实现
下一篇: RequestParam注解以及将ServletAPI作为入参
胖头鱼小子
博客等级 码龄6年 10粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值