在使用RestFul风格开发时,通过 URL 定位资源,通过HTTP请求方式表示对资源的处理方式,对应方式如下表所示。
GET | 查询 |
---|---|
POST | 增加 |
PUT | 更新 |
PATCH | 更新(通常是部分修改) |
DELETE | 删除 |
但是,前端中表单只能发送GET、POST两种请求方式,无法发送其他三种请求。因此,必须要在后端对请求方式进行处理,转换成其他三种请求。
SpringMVC底层中提供了 hiddenHttpMethodFilter 过滤器,可以拦截HTTP请求,将POST请求转换成我们需要的请求。hiddenHttpMethodFilter 要求表单使用 POST 请求方式,同时添加参数 name = “_method”,value = “PUT/PATCH/DELETE”。表单提交之后,hiddenHttpMethodFilter 会拦截该请求,如果发现是POST请求同时有"_method"参数时,会将请求包装成我们设置的请求方式。
public class HiddenHttpMethodFilter extends OncePerRequestFilter {
private static final List<String> ALLOWED_METHODS =
Collections.unmodifiableList(Arrays.asList(HttpMethod.PUT.name(),
HttpMethod.DELETE.name(), HttpMethod.PATCH.name()));
/** Default method parameter: {@code _method}. */
public static final String DEFAULT_METHOD_PARAM =