private String initialRequestBody() {
String length = request.getHeader("content-length");
if (length == null || "0".equals(length))
return null;
byte[] buffer = new byte[Integer.parseInt(length)];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ServletInputStream stream = request.getInputStream();
int len = stream.read(buffer);
bos.write(buffer, 0, len);
} catch (IOException e) {
e.printStackTrace();
}
try {
String bodyDate = new String(bos.toByteArray(), "UTF-8");
return bodyDate;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
获取内容总是获取到前面一部分,请求的Json字符串长度8294个字符,ContentLength为8294,ServletInputStream 的长度为7814,怎么解决呢?
1 个解决方案
#1
先给你看个资料,关于Content-Length的含义:
Http协议中关于Content-Length的解读_服务器教程_三联 http://www.3lian.com/edu/2014/04-23/143443.html
通过这篇文章的解读,我们可以看到Content-Length只是个参考值,并不绝对表示实际输入流的长度。
所有,我们通常不会用Content-Length去限定读取长度,一般是写while语句,循环读取,直到读到表示结束的-1。
参考:
request.getInputStream() 的两种解析方式 - sagewsg - ITeye技术网站 http://sagewsg.iteye.com/blog/1717923
Http协议中关于Content-Length的解读_服务器教程_三联 http://www.3lian.com/edu/2014/04-23/143443.html
通过这篇文章的解读,我们可以看到Content-Length只是个参考值,并不绝对表示实际输入流的长度。
所有,我们通常不会用Content-Length去限定读取长度,一般是写while语句,循环读取,直到读到表示结束的-1。
参考:
request.getInputStream() 的两种解析方式 - sagewsg - ITeye技术网站 http://sagewsg.iteye.com/blog/1717923
#1
先给你看个资料,关于Content-Length的含义:
Http协议中关于Content-Length的解读_服务器教程_三联 http://www.3lian.com/edu/2014/04-23/143443.html
通过这篇文章的解读,我们可以看到Content-Length只是个参考值,并不绝对表示实际输入流的长度。
所有,我们通常不会用Content-Length去限定读取长度,一般是写while语句,循环读取,直到读到表示结束的-1。
参考:
request.getInputStream() 的两种解析方式 - sagewsg - ITeye技术网站 http://sagewsg.iteye.com/blog/1717923
Http协议中关于Content-Length的解读_服务器教程_三联 http://www.3lian.com/edu/2014/04-23/143443.html
通过这篇文章的解读,我们可以看到Content-Length只是个参考值,并不绝对表示实际输入流的长度。
所有,我们通常不会用Content-Length去限定读取长度,一般是写while语句,循环读取,直到读到表示结束的-1。
参考:
request.getInputStream() 的两种解析方式 - sagewsg - ITeye技术网站 http://sagewsg.iteye.com/blog/1717923