在实现 restful 的更新操作时,需要将表单数据以 PUT 方法提交。
下面是我的代码片段:
update.html
<form id="updateForm" action="#" th:method="post" th:action="@{/provider}" >
<!--发送put请求修改供应商信息-->
<!--1. 在SpringMVC中配置HiddenHttpMethodFilter(SpringBoot自动配置好了)
2. 页面创建一个method="post"表单
3. 创建一个input标签 name="_method",value="指定请求方式"-->
<input type="hidden" name="_method" value="put">
<input type="hidden" name="pid" th:value="${provider.pid}">
<!--div的class 为error是验证错误,ok是验证成功-->
<div class="">。。后面省略
<div class="providerAddBtn">
<!--<a href="#">保存</a>-->
<!--<a href="providerList.html">返回</a>-->
<input type="button" value="保存" onclick="$('#updateForm').submit();"/>
<input type="button" value="返回" onclick="history.back(-1)"/>
</div>
Controller:
//修改供应商信息
@PutMapping("/provider")
@ResponseBody
public String update(Provider provider) {
logger.info("修改供应商信息: " + provider);
providerDao.save(provider);
//重定向到列表页
return "redirect:/providers";
}
}
所以直接在表单提交的数据中添加 "_method" 数据并不起作用。
解决办法就是在 Spring Boot 的配置文件 application.properties 中将 hiddenmethod 过滤器设置为启用即可。
新的springboot版本 默认不开启 restful 分割api 需要在配置文件中开启 # 启用hiddenMethod过滤器 spring.mvc.hiddenmethod.filter.enabled=true。不然这个_method会失效。在配置文件加上配置就行了