ParameterRequestWrapper requestWrapper = new ParameterRequestWrapper(request);
BufferedReader reader = requestWrapper.getReader();
StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
stringBuffer.append(line);
}
ParameterRequestWrapper 是我自己写的一个requst请求继承了HttpServletRequestWrapper
import com.alibaba.fastjson.JSON;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
public class ParameterRequestWrapper extends HttpServletRequestWrapper {
private Map params = new HashMap<>();
public ParameterRequestWrapper(HttpServletRequest request) {
super(request);
//将参数表,赋予给当前的Map以便于持有request中的参数
this.params.putAll(request.getParameterMap());
}
public ParameterRequestWrapper(HttpServletRequest request, Map extendParams) {
this(request);
//这里将扩展参数写入参数表
addAllParameters(extendParams);
}
@Override
public Enumeration getParameterNames() {
return new Vector(params.keySet()).elements();
}
@Override
public String getParameter(String name) {
String[] values = params.get(name);
if (values == null || values.length == 0) {
return null;
}
return values[0];
}
@Override
public String[] getParameterValues(String name) {
String[] values = params.get(name);
if (values == null || values.length == 0) {
return null;
}
return values;
}
public void addAllParameters(Map otherParams) {
for (Map.Entry entry : otherParams.entrySet()) {
addParameter(entry.getKey(), entry.getValue());
}
}
public void addParameter(String name, Object value) {
if (value != null) {
if (value instanceof String[]) {
params.put(name, (String[]) value);
} else if (value instanceof String) {
params.put(name, new String[]{(String) value});
} else {
params.put(name, new String[]{JSON.toJSONString(value)});
}
}
}
}
解决思路:
既然requst请求读取后再次读取指向已经不一样,干脆直接用一个自己new出来的requst进行读取,把数据赋给自己new出来的requst,再次请求,拿到的值还是对的,而不是空。
注意:
用reader.reader()并不好用,会出现有数据却不读情况,慎重!!!
解决办法比较新奇,仅供借鉴,有啥好方法欢迎指导。



