Request body二次取得的问题
来源:互联网 发布:网络排名优化方案 编辑:程序博客网 时间:2024/05/20 10:21
HttpServletRequest中的取得body的方法有两种:getInputStream()、getReader()。
但是这个两个方法只能用一次,取第二次的时候就会变为null,然而HttpServletRequest中的body二进制还是有的,感觉特别奇怪,原因可能是游标的变动,HttpServletRequest第一次取body时游标以跑到二进制流的尾部,然后第二次去的时候就取不到了,解决方法如下:
重写HttpServletRequestWrapper
public class BodyReaderHttpServletRequestWrapper extends
HttpServletRequestWrapper {
private byte[] body;
public BodyReaderHttpServletRequestWrapper(HttpServletRequest request) {
super(request);
String charset = request.getCharacterEncoding();
if (StringUtils.isNullOrEmpty(charset)) {
charset = "utf-8";
}
try {
body = StreamUtil.readBytes(request.getReader(), charset);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader(getInputStream()));
}
@Override
public ServletInputStream getInputStream() throws IOException {
final ByteArrayInputStream bais = new ByteArrayInputStream(body);
return new ServletInputStream() {
@Override
public int read() throws IOException {
return bais.read();
}
@Override
public boolean isFinished() {
return false;
}
@Override
public boolean isReady() {
return false;
}
@Override
public void setReadListener(ReadListener readListener) {
}
};
}
然后 ServletRequest requestWrapper= new BodyReaderHttpServletRequestWrapper((HttpServletRequest);
之后用requestWrapper就可随便去body值了。
- Request body二次取得的问题
- Request不能取得正确的中文参数的问题。
- struts2取得request的方法
- beego 获取 Request Body 里的内容
- 解决filter拦截request中body内容后,字符流关闭,无法传到controller的问题
- body的margin问题。
- 数据库的数据取得后的二次封装
- dwr取得request的一些信息!!~
- struts2取得request,session,appilcation的方法
- ognl 取得request、session 的值
- struts2取得request,session,appilcation的方法
- struts2取得request,session,appilcation的方法
- ognl 取得request、session 的值
- Fiddler的实践心得(四):修改request的body
- Request 内容实体body的简单例子 PART3
- QWebView二次链接的问题
- spring二次代理的问题
- 显示HttpServletRequest request中的body
- Linux中的MACH定义之MACHINE_START / MACHINE_END
- Android中bootchart的使用
- 我这个if else 语句怎么运行不正确啊
- Linux下安装与配置Mysql 5
- STL 库中的陷阱----一个难以察觉的 bug
- Request body二次取得的问题
- static小结
- Scala 的 yield
- UML类图新手入门级介绍
- Linux / Unix Command: bzip2
- JNI java.lang.UnsatisfiedLinkError
- Android高效加载大图、多图解决方案,有效避免程序OOM
- ubuntu上面编译并使用OpenCV
- 为SSD编程(2):SSD的架构和基准