HttpServletRequest获取Body内容不完整

时间:2022-11-10 18:04:06
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

#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