Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在服务器端以Java字符串的形式获取HTTP POST请求主体?_Java_Http_Post - Fatal编程技术网

如何在服务器端以Java字符串的形式获取HTTP POST请求主体?

如何在服务器端以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

HttpExchange对象的getRequestBody方法返回InputStream。要正确阅读“正文”,还有很多工作要做。它是否是一个Java库+对象+方法,它又向前走了一步,并将主体(在服务器端)作为一个随时可用的Java字符串返回?

您尝试过这个吗

 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());