環境: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的錯誤。