springboot2 - 请求相关的兼容配置
StandardServletMultipartResolver
StandardServletMultipartResolver 在 spring4 和 spring5 代码是不一样的。
在低版本 spring 环境下,文件只能通过 POST 请求提交。
对程序的影响可能不大,因为现在的做法,基本形成统一的定式:
文件表单和业务表单分离,先将文件上传,返回一段 url,再将 url 加入到业务表单之后提交,
如果采用这种设计,整个应用只需要一个上传接口就够了。
package org.springframework.web.multipart.support;
public class StandardServletMultipartResolver implements MultipartResolver {
public boolean isMultipart(HttpServletRequest request) {
if (!"post".equalsIgnoreCase(request.getMethod())) {
return false;
} else {
String contentType = request.getContentType();
return StringUtils.startsWithIgnoreCase(contentType, "multipart/");
}
}
}
package org.springframework.web.multipart.support;
public class StandardServletMultipartResolver implements MultipartResolver {
@Override
public boolean isMultipart(HttpServletRequest request) {
return StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/");
}
}
HiddenHttpMethodFilter
引入 Restful 概念之后,多出了一些请求方式:PUT、DELETE。
Restful 毕竟是新的概念,不是任何场景,都能成功提交 PUT、DELETE 请求。
如果出现不兼容,就可以启用 HiddenHttpMethodFilter。
提交表单的时候,在表单中增加一个参数,name 是 _method,value 就是你所需要的请求方式,
表单仍然以 POST 方式提交,到后台之后,程序会自动将请求方式转换成你指定的方式。
启用方式如下:
spring:
# 启用 HiddenHttpMethodFilter,允许以 POST 的方式提交 PUT、DELETE 等类型请求
mvc:
hiddenmethod:
filter:
enabled: true
比如:通过表单提交一个 DELETE 请求:
<!-- 表单实际是以 POST 请求方式提交 -->
<form target="_blank" method="post">
<input type="number" name="id" value="1">
<!-- 增加一个字段,声明本次请求方式 -->
<input type="hidden" name="_method" value="DELETE">
</form>
也可以对 ajax 进行二次封装:
// jQuery环境下纪念款程序代码
function ajax(options) {
if (options.type === "PUT") {
options.data._method = "PUT";
} else if (options.type === "DELETE") {
options.data._method = "DELETE";
options.type = "POST";
} else if (options.type === "POST") {
options.data._method = "POST";
} else if (options.type === "GET") {
options.data._method = "GET";
}
let layer_load_index = layer.load();
return new Promise((resolve, reject) => {
jQuery.ajax(
options
).always(function () {
layer.close(layer_load_index);
}).fail(function (xhr, status, err) {
console.error(xhr.responseText);
console.error(xhr.status);
console.error(xhr.readyState);
console.error(xhr.statusText);
console.error(status);
reject(err);
}).done(function (result) {
resolve(result);
});
});
}
疯狂的妞妞 :每一天,做什么都好,不要什么都不做!