前端界面用JQuery.Ajax()的data的方法来传递数据时,即没有用GET方法传递参数,主要是看HTTP请求里Entity的字段里的Content-Type里的值。
如果Content-Type里的值为multipart/form-data;表示在jquery ajax方法中的data里面是有文件流的。
前端:
var saveAlbum = function () {
$.ajax(
{
url: "/Home/PostAlbum",
type: "POST",
dataType: "json",
data: { AlbumName: "shanghai", Entered: "5/9/2013" },
success: function (result) {
alert(result);
},
error: function (xhr, status, p3, p4) {
var err = "Error " + " " + status + " " + p3;
if (xhr.responseText && xhr.responseText[0] == "{")
err = JSON.parse(xhr.responseText).message;
alert(err);
}
});
}
所以可以用如下方式来进行参数解析,解析方式参考文档servlet接收multipart/form-data表单数据
引入了commons-fileupload-1.3.jar和commons-io-1.2.jar包,就可以添加代码
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
List items = upload.parseRequest(request);
Map param = new HashMap();
for(Object object:items){
FileItem fileItem = (FileItem) object;
if (fileItem.isFormField()) {
param.put(fileItem.getFieldName(), fileItem.getString("utf-8"));//如果你页面编码是utf-8的
}else{
fileArray = item.get();
if(null == item.getName())
continue;
}
}
如果Content-Type里的值为application/x-www-form-urlencoded;(非get/post文件的操作,如delete)
则可以用如下代码
request.setCharacterEncoding("utf-8");
ServletInputStream in = request.getInputStream();
String s = IOUtils.toString(in);
log.debug(s);
String[] params = s.split("&");
Map<String, Object> map = this.toMapList(params);
if(null == map){
Connect_Http.format_HttpResponse_ForJson(response,HttpStatus.SC_OK,null,
ErrCodCollection.ERRCOD_FAL003,ErrCodCollection.DATA_NO_EXIT);
return;
}
private Map<String,Object> toMapList(String[] params){
if(null == params)
return null;
Map<String,Object> map = new HashMap<String,Object>();
for(String tmp:params){
String[] ms = tmp.split("=");
if(2 ==ms.length)
map.put(ms[0], ms[1]);
else if(1 ==ms.length){
map.put(ms[0], null);
}else{
return null;
}
}
return map;
}
通过上面的函数,可以用map.get("key")来取得对应的参数值
其中,类IOUtils.toString()这个函数是在包org.apache.commons.io.*;即上面引用的commons-io-1.2.jar包中有包含。