//request没有 request.setParameter()方法,可以通过下面的形式添加新的参数进request中去
/**
* request 方法添加新的参数
* 例:
* Map<String, String[]> m = new HashMap<String, String[]>(request.getParameterMap());
* m.put("abc", new String[] { "1" });
* request = new ParameterRequestWrapper(request, m);
*/
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map<String, String[]> params;
public ParameterRequestWrapper(HttpServletRequest request, Map<String, String[]> newParams) {
super(request);
this.params = newParams;
renewParameterMap(request);
}
@Override
public String getParameter(String name) {
String result = "";
Object v = params.get(name);
if (v == null) {
result = null;
} else if (v instanceof String[]) {
String[] strArr = (String[]) v;
if (strArr.length > 0) {
result = strArr[0];
} else {
result = null;
}
} else if (v instanceof String) {
result = (String) v;
} else {
result = v.toString();
}
return result;
}
@Override
public Map<String, String[]> getParameterMap() {
return params;
}
@Override
public Enumeration<String> getParameterNames() {
return new Vector<String>(params.keySet()).elements();
}
@Override
public String[] getParameterValues(String name) {
String[] result = null;
Object v = params.get(name);
if (v == null) {
result = null;
} else if (v instanceof String[]) {
result = (String[]) v;
} else if (v instanceof String) {
result = new String[] { (String) v };
} else {
result = new String[] { v.toString() };
}
return result;
}
private void renewParameterMap(HttpServletRequest req) {
String queryString = req.getQueryString();
if (queryString != null && queryString.trim().length() > 0) {
String[] params = queryString.split("&");
for (int i = 0; i < params.length; i++) {
int splitIndex = params[i].indexOf("=");
if (splitIndex == -1) {
continue;
}
String key = params[i].substring(0, splitIndex);
if (!this.params.containsKey(key)) {
if (splitIndex < params[i].length()) {
String value = params[i].substring(splitIndex + 1);
this.params.put(key, new String[] { value });
}
}
}
}
}
}
//以上是代码需要的类,下面是方法中怎么调用
Map<String, String[]> m = new HashMap<String, String[]>(request.getParameterMap());
m.put("abc", new String[] { "1" });
request = new ParameterRequestWrapper(request, m);
//创建新的request (具体啥异常没试)
##No thread-bound request found: Are you referring to request attr异常
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
##NullPointerException异常
((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest()
版权声明:本文为hongchenghong原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。