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的错误。

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