HiddenHttpMethodFilter過濾器的使用:在SpringBoot2中修改表單的提交方式(PUT,DELETE)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章