如何在服务器端以Java字符串的形式获取HTTP POST请求主体?
HttpExchange对象的getRequestBody方法返回InputStream。要正确阅读“正文”,还有很多工作要做。它是否是一个Java库+对象+方法,它又向前走了一步,并将主体(在服务器端)作为一个随时可用的Java字符串返回?您尝试过这个吗如何在服务器端以Java字符串的形式获取HTTP POST请求主体?,java,http,post,Java,Http,Post,HttpExchange对象的getRequestBody方法返回InputStream。要正确阅读“正文”,还有很多工作要做。它是否是一个Java库+对象+方法,它又向前走了一步,并将主体(在服务器端)作为一个随时可用的Java字符串返回?您尝试过这个吗 InputStreamReader isr = new InputStreamReader(exchange.getRequestBody(),"utf-8"); BufferedReader br = new BufferedRead
InputStreamReader isr = new InputStreamReader(exchange.getRequestBody(),"utf-8");
BufferedReader br = new BufferedReader(isr);
String value = br.readLine();
您可以使用Commons IO的
org.apache.Commons.IO.IOUtils.toString(InputStream,String)
在一行中完成此操作。(但它可能无法与HTTP保持活动状态一起工作)
编辑:
如果您想直接使用JSON,有一组Web服务堆栈可以为您进行解组。试一试
春天:
CXF/JAX-RS:如果您使用的是springmvc,那么可以对String类型的方法参数使用@RequestBody注释。比如说
@RequestMapping(value = "/something", method = RequestMethod.POST)
public void doSomething(@RequestBody String requestBodyString) {
// does something..
}
在HttpHandler中:
InputStreamReader isr = new InputStreamReader(he.getRequestBody(), "utf-8");
BufferedReader br = new BufferedReader(isr);
int b;
StringBuilder buf = new StringBuilder();
while ((b = br.read()) != -1) {
buf.append((char) b);
}
br.close();
isr.close();
System.out.println(buf.toString());
是的,我试过了。问题是车身没有以CR/LF结尾。我通过使用read(char[])方法和内容长度找到了一个解决方案,它大致可以工作。我想知道它是否不是一个一直执行这个读取任务的方法。您应该从HTTP头中获取编码,而不仅仅是假设它是UTF-8。它是Json。我破译它并将数据插入MySQL数据库。这是直接转到Json的一种方式吗?那太好了!StringBuilder buf=新的StringBuilder();这里没有什么?InputStreamReader(t.getRequestBody(),“utf-8”);
InputStreamReader isr = new InputStreamReader(he.getRequestBody(), "utf-8");
BufferedReader br = new BufferedReader(isr);
int b;
StringBuilder buf = new StringBuilder();
while ((b = br.read()) != -1) {
buf.append((char) b);
}
br.close();
isr.close();
System.out.println(buf.toString());