【SpringMVC】HiddenHttpMethodFilter 转换请求方式

news2024/11/26 8:54:22

由于浏览器只支持发送get和post方式的请求,那么该如何发送put和delete请求呢?
SpringMVC 提供了 HiddenHttpMethodFilter 帮助我们将 POST 请求转换为 DELETE 或 PUT 请求
HiddenHttpMethodFilter 处理put和delete请求的条件:

  • 当前请求的请求方式必须为post
  • 当前请求必须传输请求参数_method
    满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数_method的值,因此请求参数_method的值才是最终的请求方式
    在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>

注:SpringMVC需要在过滤器:HiddenHttpMethodFilter前提供字符编码过滤器CharacterEncodingFilter 。在web.xml中注册时,必须先注册CharacterEncodingFilter,再注册HiddenHttpMethodFilter。(web.xml中过滤器的先后顺序就是过滤器的执行顺序)
原因:

  • 在 CharacterEncodingFilter 中通过 request.setCharacterEncoding(encoding) 方法设置字符集的
  • request.setCharacterEncoding(encoding) 方法要求前面不能有任何获取请求参数的操作
  • 而 HiddenHttpMethodFilter 恰恰有一个获取请求方式的操作:
    String paramValue = request.getParameter(this.methodParam);
    查看怎么设置CharacterEncodingFilter点击这里

设置好HiddenHttpMethodFilter过滤器,我们测试一下,先写一个只能接受delete请求的Controller

@Controller
public class HelloController {

    @RequestMapping(value = "/hello",method = RequestMethod.DELETE)
    public String  hello(String username){
        System.out.println("接受到delete请求username: "+username);
        return "index";
    }

    @RequestMapping("/")
    public String index(){
        return "index";
    }
}

index.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form th:action="@{/hello}" method="post">
        <input type="hidden" name="_method" value="delete">
        <input type="text" name="username" >
        <input type="submit" value="提交">
    </form>
</body>
</html>

先用请求项目根路径/得到index.html .再借助from表单,发送一个带有键值对_method=deletepost请求,发送到后端可经过HiddenHttpMethodFilter时,会将post报文转变为delete请求方式的报文

在这里插入图片描述
查看后端结果:
在这里插入图片描述

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

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

相关文章

软考《系统集成项目管理工程师》必备100题(1)

新一轮软考备考来啦~为了帮助大家提高备考效率&#xff0c;将2023上半年软考《系统集成项目管理工程师》必备100题&#xff0c;分享给大家&#xff0c;快来跟着一起打卡学习吧&#xff01; 有电子版的&#xff0c;可以打印下来背诵~ 1.项目管理过程组有哪些? 启动过程组:定…

aspose win/linux WORD转PDF(及其解决乱码方式)

aspose win/linux WORD转PDF&#xff08;及其解决乱码方式&#xff09;1.工具类2.控制台3.解决乱码4.JAR包之前自己用的docm4j 本地进行转换是ok 在服务器中就异常了&#xff1b; 后来在网上查询之后 do4j无法支持liunx系统&#xff1b; 1.工具类 package com.aostar.ida.fra…

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计2

LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计2 这部分是< LabVIEW在面向对象编程中利用硬件抽象层(HAL)设计1>的下半部分。 一体化项目 因此&#xff0c;部署为打包库&#xff0c;实际上有多种方法来开发代码:首先&#xff0c;将查看all-in-one项目方法。父类和子…

python numpy 的输出控制

示例代码&#xff1a; import numpy as np #precision: xnp.array([3.1415926]) print(x) np.set_printoptions(precision4) print(x)#threshold: xnp.arange(0,12,1) print(x) np.set_printoptions(threshold7) print(x)#edgeitems: xnp.arange(0,12,1) print(x) np.set_prin…

【大数据】clickhouse 常用语法规则优化策略详解

一、前言 在之前的文章中&#xff0c;我们了解到clickhouse作为一款列式存储数据库 &#xff0c;查询性能非常高效&#xff0c;一方面与其自身的存储引擎设计有关&#xff0c;另一方面&#xff0c;在执行查询语句时&#xff0c;底层做了大量的语法规则的优化&#xff0c;本文将…

一体化闸门控制机如何使用

一体化闸门控制机是一款集水位采集、流量计算、图片视频采集、远程通讯、远程控制、本地控制于一体的闸门自动化、信息化测控设备&#xff0c;能够在监控中心远程启闭以及闸门手/自动控制;并通过实时图像监控可以直观了解闸门的运行工况以及周边环境。 1、设备介绍 闸门自动化…

Windows11 Docker镜像存储路径更改(非C盘路径)

Windows11 Docker镜像存储路径更改&#xff08;非C盘路径&#xff09; 基于WSL2安装docker后&#xff0c;在使用过程中会发现大量的docker镜像文件&#xff0c;使系统C盘容量激增&#xff0c;对电脑后续使用造成不便&#xff0c;所以需要在安装的时候&#xff0c;手动修改dock…

已开发多款原型,或明年发布新品,三星XR专利布局大揭秘

近期据韩媒Naver新闻爆料&#xff0c;三星电子或将于明年面向开发者推出XR头显&#xff0c;以构建XR生态系统。据悉&#xff0c;三星计划通过打造XR生态系统&#xff0c;来整合元宇宙、软件、内容、元件开发和科研等上下游领域。据称&#xff0c;为了开发XR设备&#xff0c;三星…

数据仓库电商业务简介完整使用 (第二章)

电商业务简介一、电商业务简介1、电商业务流程2、电商常识1&#xff09;SKU和SPU2&#xff09;平台属性和销售属性1&#xff09;平台属性2&#xff09;销售属性二、业务数据介绍1、电商系统表结构1、活动信息表&#xff08;activity_info&#xff09;2、动规则表&#xff08;ac…

【Docker】解决Docker创建Tomcat容器实例后访问Tomcat主页时报HTTP状态404-未找到的错误

专栏精选文章 《Docker是什么&#xff1f;Docker从介绍到Linux安装图文详细教程》《30条Docker常用命令图文举例总结》《Docker如何构建自己的镜像&#xff1f;从镜像构建到推送远程镜像仓库图文教程》《Docker多个容器和宿主机之间如何进行数据同步和数据共享&#xff1f;容器…

LeetCode HOT 100 —— 215.数组中的第K个最大元素

题目 给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 思路 一.暴力法&#xff1a; cla…

计算机研究生就业方向之去大厂做人工智能

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么&#xff0c;如果你只是转码&#xff0c;那么你不一定要考研&#xff0c;至少以下几个职位研究生是没有啥优势的&#xff1a; 1&#xff0c;软件测试工程师&#xff08;培训一下就行&#xff09; 2&#xff0c;前…

ARM32汇编逆向分析基础

寄存器和指令基本格式 寄存器 寄存器名称寄存器描述R0函数的第1个参数, 以及保存函数返回的结果R1 - R3保存函数的第2~4个参数R4 – R8通用寄存器&#xff0c;其中R7在系统调用时存储调用号R9平台相关R10通用寄存器, 可用于保存局部变量R11/FP栈帧指针, 用于记录栈帧R12过程间…

欣奥诚分享:企业最应避讳这八类广告宣传词汇

广告宣传中&#xff0c;企业最应避讳这八类词汇 众所周知&#xff0c;拥有一个朗朗上口、脍炙人口的广告标语、广告口号&#xff0c;对于企业战略部署、发展壮大具有最要作用。一个好的广告标语&#xff0c;不仅可以传达产品买点、展现品牌魅力&#xff0c;激发购买欲望&#…

安装多版本node

一、安装多版本node的原因&#xff1a; 在项目开发过程中&#xff0c;不同项目使用的nodejs版本不同&#xff0c;有时会因为node版本过高或太低&#xff0c;导致报错&#xff1b; 解决方式 利用nvm进行管理&#xff08;本文使用此种方式&#xff09;配置环境变量&#xff08;如…

iOS 组件化开发----(一)图片资源管理的方式

1.直接拖拽到工程&#xff0c;勾选Target membership 1&#xff09;Resource 的使用方式 将文件直接拖入到工程目录下, 并告诉Xcode打包项目时候把这些图片文件打包进去. 这样在应用的".app"文件夹中就有这些图片. 在项目中, 读取这些图片可以通过以下方式来获取图片…

JavaWeb开发(一)——maven仓库

一、maven仓库 1、maven的定义 Maven 是一个项目管理工具&#xff0c;可以对 Java 项目进行构建、依赖管理。 2、maven的约定配置 -- /src/main/java //项目java源代码 -- /src/main/resources //项目的资源文件&#xff0c;比如springmvc.xml -- /src/…

极狐gitlib的安装和使用

极狐gitlib的安装和使用一、实验环境二、安装部署&#xff08;不带邮箱&#xff09;三、一些操作3.1 常用命令3.2 备份3.2.1 备份文件分为两步&#xff1a;3.2.2 自定义备份位置3.3 恢复3.4 一些问题3.5 包含的组件四、使用极狐gitlib4.1 初始登录说明4.2 新建用户4.3 新建一个…

CSS之文字样式

1、字体类型设置 标签名&#xff1a;font-family注意&#xff1a;英文字体只适用于英文&#xff0c;中文字体可以适用中文和英文代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-…

Linux学习-81-Apache安装过程

17.9 Apache安装过程 Apache&#xff1a;作为LAMP架构的前端是一款功能强大&#xff0c;稳定性好的Web服务器程序&#xff0c;该服务器直接面向用户提供网站访问&#xff0c;发送网页&#xff0c;图片等文件内容。之前的名称就叫做 Apache&#xff0c;不过后来改名字叫做 httpd…