我正在尝试用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
} …Run Code Online (Sandbox Code Playgroud) 我正在使用javax.servlet.http.HttpServletRequest来实现Web应用程序.
使用getParameter方法获取请求的参数没有问题.但是我不知道如何在我的请求中设置参数.
我正在研究遗留代码,需要制作补丁.
问题:古老的应用程序发送错误的HTTP POST请求.其中一个参数不是URL编码的.我知道这个参数总是最后一个,我知道它的名字.我现在正试图在服务器端修复它,它在tomcat中运行.
此参数无法通过HttpServletRequest的标准getParameter方法访问,因为它格式不正确.方法只返回null.但是当我通过ServletInputStream手动读取整个请求时,所有其他参数都会消失.看起来底层类无法解析ServletInputStream的内容,因为它已耗尽.
到目前为止,我已经设法创建一个包装器,从body读取所有参数并覆盖所有参数访问方法.但是如果我之前的链中的任何过滤器都会尝试访问任何参数,那么一切都会破坏,因为ServletInputStream将为空.
我可以以某种方式逃避这个问题吗?可能有不同的方法吗?
总而言之,如果我将在过滤器中读取原始请求主体,参数将从请求中消失.如果我读取单个参数,ServletInputStream将变为空,并且无法进行手动处理.而且,通过getParameter方法读取格式错误的参数是不可能的.
我有一个RestFull grails api,我通过grails Controller公开.我需要自动绑定POST请求中发送的xml数据.我不认为使用groovy bindData(object,params)作为params引用似乎没有xml元素.我parseRequest=true在UrlMappings中使用了但是paramsObject没有xml元素.
我错过了一些其他配置,以便我的params对象自动填充xml body元素?