在url中参数有中文字符使用post进行查询数据,但是下载却没有任何数据。
所以怀疑下载是get请求,中文字符传入成了乱码导致的,虽然在web.xml里已经配置过了字符集编码。
<!-- UTF编码过滤 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是get请求的参数还是有问题。具体原因可以参考https://blog.youkuaiyun.com/u014201499/article/details/71553707。
但是奇怪的是,在有些环境是可以下载支持中文参数的。想想可能是tomcat的容器配置不一样。
为了保证get数据采用UTF8编码,在server.xml中进行了如下设置
<Connector port="8989" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true"
URIEncoding="UTF-8"/
项目中下载按钮的js事件函数:
downLoadClick: function (e, at, o) {
var params = $.extend(searchOption.aelFilterOption,{});
params.reqPageIndex=0;//防止受分页影响
if(aelType==3){
params.handleUser=$("#ims-user").text();
delete params.windowId;
}
var exportAlertToExcel = urlFilter.getUrl('exportAlertToExcel');
var form = $('<form>');
form.attr('style', 'display:none');
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', exportAlertToExcel);
$('body').append(form);
for(var key in params){
var input=document.createElement("input");
input.name=key;
input.value=params[key];
form.append(input);
}
form.submit().remove();
},
这样提交用的POST请求。可奇怪的是,在查询时使用POST请求,参数有中文值是没有问题的,而这里的下载中文会是乱码,导致下载结果不正确。
不知道是不是ajax的POST请求和form的POST提交请求有什么区别。
form表单POST请求中文在后台乱码问题可以这样解决参看https://blog.youkuaiyun.com/qq_32040767/article/details/72966030:
accept-charset="GBK" 谷歌等浏览器不在乱码了,但是IE还在乱码 继续加
onsubmit="document.charset='GBK';" 即可解决。
修改后的代码(这样的代码还是有问题,依然解决不了):
downLoadClick: function (e, at, o) {
var params = $.extend(searchOption.aelFilterOption,{});
params.reqPageIndex=0;//防止受分页影响
if(aelType==3){
params.handleUser=$("#ims-user").text();
delete params.windowId;
}
var exportAlertToExcel = urlFilter.getUrl('exportAlertToExcel');
var form = $('<form accept-charset="UTF-8" onsubmit="document.charset=\'UTF-8\'">');
form.attr('style', 'display:none');
form.attr('target', '');
form.attr('method', 'post');
form.attr('action', exportAlertToExcel);
$('body').append(form);
for(var key in params){
var input=document.createElement("input");
input.name=key;
input.value=params[key];
form.append(input);
}
form.submit().remove();
},