获取不到request的值
先从request(普通表单)中取值,如果取不到,则从MultipartFormData( 文件上传) 解析取值。
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class ToolAction {
/**
* 将参数字符串转换为Map<paramKey,paramValue> eg.
* xxKey=xxValue&yyKey=yyValue&zzKey=zzValue -->
* Map{xxKey=xxValue,yyKey=yyValue,zzKey=zzValue}
*
* @param request
* @throws UnsupportedEncodingException
* @throws FileUploadException
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static Map<String, String> getParameters(HttpServletRequest request) throws UnsupportedEncodingException {
// 参数Map
Map<String, String[]> properties = request.getParameterMap();
// 返回值Map
Map<String, String> returnMap = new HashMap<String, String>();
Iterator<?> entries = properties.entrySet().iterator();
Map.Entry entry;
String name = "";
String value = null;
while (entries.hasNext()) {
entry = (Map.Entry) entries.next();
name = (String) entry.getKey();
Object valueObj = entry.getValue();
if (null == valueObj) {
} else if (valueObj instanceof String[]) {
String[] values = (String[]) valueObj;
for (int i = 0; i < values.length; i++) {
value = values[i] + ",";
}
value = value.substring(0, value.length() - 1);
} else {
value = valueObj.toString().trim();
}
returnMap.put(name, value);
}
return returnMap;
}
/**
* 将参数字符串转换为Map<paramKey,paramValue> eg.
* xxKey=xxValue&yyKey=yyValue&zzKey=zzValue -->
* Map{xxKey=xxValue,yyKey=yyValue,zzKey=zzValue}
* <p>
* (处理multipart/form-data类型的表单请求)
*
* @param request
* @throws UnsupportedEncodingException
* @throws FileUploadException
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static Map<String, String> getParametersForMultipartFormData(HttpServletRequest request)
throws UnsupportedEncodingException, FileUploadException {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
request.setCharacterEncoding("utf-8");
Map<String, String> returnMap = new HashMap<String, String>();
// 返回值Map
// 文件上传的三部曲
// 创建工厂
DiskFileItemFactory factoy = new DiskFileItemFactory();
// 创建解析器
ServletFileUpload sfu = new ServletFileUpload(factoy);
// 设置上传文件的大小
// sfu.setFileSizeMax(20 * 1024);
// 解析request
List<FileItem> list = sfu.parseRequest(request);
// 只处理非文件内容
for (FileItem fi : list) {
if (fi.isFormField()) {//只要普通字段,不要文件
returnMap.put(fi.getFieldName(), fi.getString("UTF-8"));
}
}
return returnMap;
}
return null;
}
/**
* 获取参数
*
* @param request
* @return
* @throws UnsupportedEncodingException
* @throws FileUploadException
*/
public static Map<String, String> getParams(HttpServletRequest request) throws UnsupportedEncodingException, FileUploadException {
Map<String, String> params = getParameters(request);
if (params.size() > 0) {
return params;
}
return getParametersForMultipartFormData(request);
}
/**
* 获取文件
*
* @param request
* @param paramName
* @return
* @throws UnsupportedEncodingException
*/
public MultipartFile getFileFromRequest(HttpServletRequest request, String paramName) throws UnsupportedEncodingException {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (multipartResolver.isMultipart(request)) {
request.setCharacterEncoding("utf-8");
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles(paramName);
return files.size() > 0 ? files.get(0) : null;
}
return null;
}
}
问题
获取中文乱码
if (fi.isFormField()) {//只要普通字段,不要文件
returnMap.put(fi.getFieldName(), fi.getString(“UTF-8”));
}