form表单put、delete方式提交处理

form表单只支持get和post的方式提交,而我们使用restful风格必然要使用到@PUTmapping、@DELETEmapping等注解,那么在提交表单时的method=“put/delete”也要对应注解,下面来看看SpringMVC和SpringBoot的处理方式。

1、SpringMVC的处理

SpringMVC通过在web.xml中配置如下过滤器HiddenHttpMethodFilter处理;然后在页面上提交一个隐藏的input来实现;

1、配置HiddenHttpMethodFilter

HttpMethodFilterfilter-name> org.springframework.web.filter.HiddenHttpMethodFilterfilter-class> filter> HttpMethodFilterfilter-name> /*url-pattern> filter-mapping>

2、表单处理

form>

注意这里的name属性只能为_method,value为我们想提交的方式;

2、SpringBoot的处理

SpringBoot已经为我们自动配置了HttpMethodFilter,SpringBoot2.2.0以上版本需要我们手动开启配置;

1、开启配置

#开启hiddenmethod 过滤器

spring.mvc.hiddenmethod.filter.enabled=true

2、表单处理

同上;

3、看看源码

Ctrl+N搜索-WebMvcAutoConfiguration类

然后Ctrl+F搜索-hiddenmethod

看看SpringBoot如何自动配置的

源码如下:

@Bean

@ConditionalOnMissingBean(HiddenHttpMethodFilter.class)

//意为当我们配置文件中没找到这个前缀(prefix)为spring.mvc.hiddenmethod.filter的名为enabled的属性就不开启这项配置,即默认false;

@ConditionalOnProperty(prefix = "spring.mvc.hiddenmethod.filter", name = "enabled", matchIfMissing = false)

public OrderedHiddenHttpMethodFilter hiddenHttpMethodFilter() { return new OrderedHiddenHttpMethodFilter();

}

按住Ctrl并点击HiddenHttpMethodFilter.class,去看看过滤器的源码

public class HiddenHttpMethodFilter extends OncePerRequestFilter{ private static final List ALLOWED_METHODS;//允许的方法 public static final String DEFAULT_METHOD_PARAM = "_method"; private String methodParam = "_method";//这就是name="_method",也就是从页面拿到的参数 public HiddenHttpMethodFilter(){ } public void setMethodParam(String methodParam){ Assert.hasText(methodParam, "'methodParam' must not be empty"); this.methodParam = methodParam; } protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException{ HttpServletRequest requestToUse = request; //这里if判断request是不是post,这也是为什么form必须为post的原因 if ("POST".equals(request.getMethod()) && request.getAttribute("javax.servlet.error.exception") == null) { //利用request.getParameter取到hidden的input传来的value; String paramValue = request.getParameter(this.methodParam); //hasLength()判断paramValue不为空即将paramValue转为大写并赋值给method if (StringUtils.hasLength(paramValue)) { //这个method才是我们真正想要的请求方式 String method = paramValue.toUpperCase(Locale.ENGLISH); //如果被允许的method中包含有我们真正想要的请求方式 if (ALLOWED_METHODS.contains(method)) { //就使用我们希望的请求方式,把不是我们传的method过滤掉了 requestToUse = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, method); } } } filterChain.doFilter((ServletRequest)requestToUse, response); } //这里定义了3种允许的方法DELETE、PUT、PATCH static { ALLOWED_METHODS = Collections.unmodifiableList(Arrays.asList(HttpMethod.PUT.name(), HttpMethod.DELETE.name(), HttpMethod.PATCH.name())); } private static class HttpMethodRequestWrapper extends HttpServletRequestWrapper{ private final String method; public HttpMethodRequestWrapper(HttpServletRequest request, String method){ super(request); this.method = method; } public String getMethod(){ return this.method; } }

}

文章来源: segmentfault.com,作者:胖椿,版权归原作者所有,如需转载,请联系作者。

原文链接:segmentfault.com/a/1190000038389511

html表单的put方法,form表单put、delete方式提交处理相关推荐

  1. form表单校验复杂系列--- form表单内插入独立的数据表格,动态校验数据表格内每行的文件上传

    form表单校验复杂系列- form表单内插入独立的数据表格,动态校验数据表格内每行的文件上传 前言 公司项目有个模块需要优化form表单内,插入独立的数据表格,表格内容是文件上传,需要利用外部表单提 ...

  2. php表单转json对象,form表单转Json提交的方法(推荐)

    form表单转Json提交的方法(推荐) 先将表单数值转换成数组存储,存储成的格式为[{"name":"","value":"&q ...

  3. html表单怎么设置编码,form 表单 设置编码和页面编码

    var isIE=!!window.ActiveXObject; if(isIE && document.charset!="utf-8")location.rel ...

  4. ajax提交表单跨域啊,form表单提交没有跨域问题,但ajax提交存在跨域问题

    浏览器的策略本质是:一个域名下面的JS,没有经过允许是不能读取另外一个域名的内容,但是浏览器不阻止你向另外一个域名发送请求. 所以form表单提交没有跨域问题,提交form表单到另外一个域名,原来页面 ...

  5. vue 给form表单赋值_vue获取form表单的值示例

    vue获取form表单的值示例 这里使用的是Element-ui组件 html: JS: var phone = this.phone; var password = this.password; v ...

  6. layui提交表单自动刷新_layui form表单提交后实现自动刷新

    刚刚使用layui 来做东西,对这一切都不熟悉,使用一下form表单,但是,不能成功的使用. 问题: 1.提交表单,页面自动刷新. 出现这样的情况呢,搜索了一下是因为表单的提交按钮没有type类型.哪 ...

  7. php 提交表单跳转页面,form表单页面跳转方式提交练习

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //form表单提交练习 /*新建一个form.html网页用来书写前端HTML表单*/ 表单提交练习 姓名: 年龄: 电话: 地址: QQ: 自我评价: ...

  8. php 表单页面跳转,form表单页面跳转方式提交练习

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //form表单提交练习 /*新建一个form.html网页用来书写前端HTML表单*/ 表单提交练习 姓名: 年龄: 电话: 地址: QQ: 自我评价: ...

  9. java 提交表单_http常见的form表单请求方式

    在Web开发中,我们使用的比较多的HTTP请求方式基本上就是GET.POST. 一.http请求常见的表单文件上传形式 首先了解下application/x-www-form-urlencoded和m ...

  10. html表单和输入方法,HTML 表单和输入

    TML 表单 表单是一个包含表单元素的区域.高佣联盟 www.cgewang.com 表单元素是允许用户在表单中输入内容,比如:文本域(textarea).下拉列表.单选框(radio-buttons ...

最新文章

  1. 免高考!2021清华北大保送名单公布,五大学科竞赛260人获保送资格
  2. ubuntu中切换到root账号方法
  3. 批量Excel数据导入Oracle数据库
  4. Hystrix熔断器功能测试示例数据
  5. 将EditText的光标定位到字符的最后面
  6. 定时调度框架:Quartz.net
  7. PAT_1032验证身份(15)
  8. java api文档_JAVA浏览器控件JxBrowser v7.3上线!最新API文档打包带走
  9. 期末考试之排名次java_2020超星尔雅《JavaWeb应用开发》期末测试答案
  10. 牛顿迭代法求解根号a的Matlab代码
  11. 2021全球程序员收入报告出炉!
  12. KrakenD网关V1.0.0文档初步翻译
  13. 安卓开发必须会的技能!Android性能优化最佳实践,知乎上转疯了!
  14. VS2019使用EasyX实现简单图形界面功能
  15. RIP --- 路由信息协议
  16. 出新书了!| 赠书啦,免费包邮
  17. 网络推广除了SEO优化还有这些方法你知道吗?
  18. 软件测试 | 白盒的测试方法
  19. HTML中td的colspan和rowspan
  20. linux备份mysql文件并恢复的脚本,以及其中出现的错误:ERROR: ASCII '\0' appeared in the statement...

热门文章

  1. tp点一共有多少_dnf人家为什么比你多好几点tp点?原因终于找到啦
  2. cinta作业5:循环群
  3. 环信Android端实时语音视频通话时在本地实现通话录音录像
  4. python 特征选择卡方_文本特征选择(信息熵、Gini、IV、卡方值)
  5. SQL求连续活跃天数
  6. 开juǎn有益系列(一)——Binary search(二分查找/折半查找算法)
  7. jsp错误之The end tag lt;/s:form is unbalanced
  8. mv背景html代码,【Html源码】适应PC端MV登录页面源码
  9. 硬件改造:新型涂鸦智能暖风机!
  10. 小程序提示 网络异常 Network Anomalies