Spring Boot笔记 — — RestfulCRUD因2.2.2版本问题出现的Delete方式post方法无效问题

记录:Restful风格CRUD因2.2.2版本更新出现的Delete方式请求报错POST方法无效问题


首先,对在上篇中 diss SpringBoot2.0以下版本表示悔恨。。。

在进行SpringBoot项目学习开发的时候,在1.5.9版本主类无法运行且没有解决的情况下,与教程相背,擅用了SpringBoot2.2.2版本。(还沾沾自喜。。呵)

在用Restful风格的CRUD进行编写的过程中,Delete业务出现问题,下面进行记录解决。


前情提要:

删除按钮自定义了del_uri标签可以发起带有指定员工id的请求。

<button th:attr="del_uri=@{/emp/}+${emp.id}" class="btn btn-sm btn-danger deleteBtn">删除</button>

在主页面外定义一个不会显示任何东西的form表单:

form表单的提交方式为post;

里面的input框不显示;name必须为_method,这是SpringBoot自动配置文件中写好的;

value为提交请求的方式,这里是删除功能,对应delete,不区分大小写。

	<form id="deleteEmpForm" method="post">
		<input type="hidden" name="_method" value="delete"/>
	</form>

下面是js代码:

获取class添加点击功能;

点击button触发form表单的提交事件,以del_uri发起请求。

<script>
    $(".deleteBtn").click(function(){
        //删除当前员工的
        $("#deleteEmpForm").attr("action",$(this).attr("del_uri")).submit();
        return false;
    });
</script>

后端代码Controller:

// 员工删除
@DeleteMapping("/emp/{id}")
public String deleteEmployee(@PathVariable("id") Integer id){
    // System.out.println("即将删除的用户的id为:"+id);
    employeeDao.delete(id);
    return "redirect:/emps"; //重定向回列表页面
}

错误出现

在员工列表页面点击删除按钮:
在这里插入图片描述
出现如下错误,POST请求不被支持。。。
在这里插入图片描述
我就纳闷了,都是照着教程一行一行写的怎么我就不行。。。

下面在Controller中写了一行控制台输出,发现根本没有运行到后端的方法中;那就是表单提交的时候就失败了。


之前SpringMVC发送一个请求的时候:

1、要配置HiddenHttpMethodFilter;而在SpringBoot中是自动配饰好的;
2、创建一个post表单;
3、创建一个input项,name="_method";值就是指定的请求方式。


HiddenHttpMethodFilter是干嘛的?

就是将我们的请求转成指定的方式;就是上面input中的value=“delete”
在这里插入图片描述
这个Filter会获取_method的值,下图代码中的paramValue代表新的请求方式的值,就是我们所指定的。
在这里插入图片描述


所以说整个请求的完成过程高度依赖于这个HiddenHttpMethodFilter

而Spring Boot已经给我们配置好了,去WebMvcAutoConfiguration看一下:
在这里插入图片描述
等一下!!为什么matchIfMissing = false????这意味着什么?

这表示Spring Boot 默认情况下认为HiddenHttpMethodFilter这个组件是存在的;而只有它不存在,Spring Boot才会把它注入到容器内。

也就是说当前容器中并没有这个组件,上述请求也就无法完成;就不难解释为什么POST请求不被允许了;

同样的事情在配置文件中也可以看到:
在这里插入图片描述
而Spring Boot1.5.10中却没有进行默认配置:
在这里插入图片描述


解决方案:

很简单,把这个组件注入到容器中就OK了。。。

源文件自然是不能修改的,直接去主配置文件中开启这个组件(百度可得 ~ 嘿嘿)

#开启组件
spring.mvc.hiddenmethod.filter.enabled=true

再一次验证他的默认值是false
在这里插入图片描述
问题解决,删除成功。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值