我正在尝试获取Java中的发布数据。好像应该做的最简单的事情之一?我的意思是,HttpServletRequest.getParameter必须正确执行吗?那么如何获取原始帖子数据?
我发现HttpServletRequest获得JSON POST数据,并使用Kdeveloper的代码从请求中提取发布数据。它有效,但是有一个陷阱:我只能一次获取该发布数据。
这是我根据Kdeveloper的代码制作的方法:
public static String getPostData(HttpServletRequest req) {
StringBuilder sb = new StringBuilder();
try {
BufferedReader reader = req.getReader();
reader.mark(10000);
String line;
do {
line = reader.readLine();
sb.append(line).append("\n");
} while (line != null);
reader.reset();
// do NOT close the reader here, or you won't be able to get the post data twice
} catch(IOException e) {
logger.warn("getPostData couldn't.. get the post data", e); // This has happened if the request's reader is closed
}
return sb.toString();
}
以前,我在此方法结束时关闭了读取器,但是当该方法在同一请求上多次运行时,这会导致异常。如果不关闭它,则不会发生任何异常,但是该方法将返回一个空字符串。
老实说,应该只提供一个公开的req.getPostData()方法-没有人认为这会有用吗?
那么,如何编写此方法,使其始终返回正确的发布数据?
请求主体可通过HttpServletRequest#getInputStream()
以下方式作为字节流使用:
InputStream body = request.getInputStream();
// ...
或作为字符流通过HttpServletRequest#getReader()
:
Reader body = request.getReader();
// ...
请注意,您只能阅读一次。客户端不会多次重发相同的请求。调用getParameter()
等等也将隐式读取它。如果以后需要分解参数,则必须将主体存储在某个地方并自行处理。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句