环境:springboot2,前后不分离项目。
一、问题
需求:通过form提交参数进行admin更新操作
<form id="update" method="POST" action="/admin/update">
...
</form>
后端为了符合 restful风格,controller中指定PUT提交方式:
@Controller
@RequestMapping("/admin")
public class AdminController {
@Autowired
private AdminService adminService;
// 修改管理员
@PutMapping("/update")
public String update(Admin admin) {
adminService.update(admin);
return "/admins/admin/list";
}
}
结果:报错,不支持POST方式。
二、解决办法
form表单只支持GET和POST提交。但是,在使用 restful风格实现更新操作时,需要将表单数据以 PUT 方法提交。而form表单不支持PUT提交。那该如何解决?
1、前端部分
首先,在页面form表单中添加如下hidden类型input:
<form id="update" method="POST" action="/admin/update">
<input type="hidden" name="_method" value="put" />
...
</form>
2、后端部分
然后在某一配置类或者直接就是启动类中添加:
@Bean
public FilterRegistrationBean hiddenHttpMethodFilter(){
FilterRegistrationBean<HiddenHttpMethodFilter> filterRegistrationBean = new FilterRegistrationBean<HiddenHttpMethodFilter>(new HiddenHttpMethodFilter());
filterRegistrationBean.setUrlPatterns(Arrays.asList("/*"));
return filterRegistrationBean;
}
通过以上配置,就可以在controller指定使用PUT提交方式。
主要参考:
https://stackoverflow.com/questions/34048617/spring-boot-how-to-use-hiddenhttpmethodfilter
三、其他
有些博客说,除了前端添加,
后端只需要在添加如下配置:
# 启用hiddenMethod过滤器
spring.mvc.hiddenmethod.filter.enabled=true
但我测试中,使用了这个配置,先是使用了springboot2.0.1,不支持这个配置。然后改为2.2.6,支持这个配置。但是依然报不支持POST的错误。