Java 请求正文在POST上为空

Java 请求正文在POST上为空,java,android,node.js,Java,Android,Node.js,创建了一个android应用程序,将数据发布到nodejs服务器 nodejs服务器是一个简单的httpweb服务器,正在运行 var http = require('http'); module.exports = http.createServer(function (req, resp) { console.log("Request received!"); resp.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8

创建了一个android应用程序,将数据发布到nodejs服务器

nodejs服务器是一个简单的httpweb服务器,正在运行

var http = require('http');

module.exports = http.createServer(function (req, resp) {
console.log("Request received!");
  resp.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});

  if (req.method == 'POST') {
        var body = '';
        req.on('data', function (data) {
            body += data;
        });
        req.on('end', function () {
            console.log("Body = " + body);
            // use POST

        });
    }    
});
客户端(Android应用程序)使用以下方式发送post请求:

        URL url = new URL(endpoint);
        conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(10000);
        conn.setConnectTimeout(10000);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("User-Agent", "Android");
        conn.setDoInput(true);
        conn.setDoOutput(true);

        OutputStream os = conn.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
        writer.write(getString());
        writer.close();
        os.close();
getString()方法定义为:

JSONObject root = new JSONObject();
root.put("test", "Testing");
return root.toString();
我在服务器上收到请求,但正文是空的

我尝试将express与bodyParser结合使用,得到了相同的结果。这是旧版本的express。即使是最新版本的express,我也有同样的问题。在本例中,我必须单独包含bodyParser模块并调用bodyParser()。在旧版本和新版本中,我都调用了“req.body”(它也是空的)


有什么想法吗??不确定为什么正文中没有填充json字符串

我不做node.js,但是你不需要从客户端发送正确的
内容类型吗<代码>conn.setRequestProperty(“内容类型”,“应用程序/x-www-form-urlencoded”)或“application/json”。如果您已验证是否进入If语句,是否已尝试将对
resp.writeHead()
的调用延迟到
req.on('end')中
callback?您可以尝试使用Wireshark之类的工具来检查连接上发送了什么或没有发送什么。我可以通过执行以下两项操作让客户端将测试数据发送到服务器:1。正如@BrianRoach所建议的,设置
内容类型
标题字段。2.在
os.close()
之后,我添加了这一行:
InputStream is=conn.getInputStream()为什么这有帮助?我不知道。但是服务器接收JSON数据,客户端抛出一个
java.net.SocketTimeoutException
。我没有得到任何地方去修复它——要么是服务器/客户端之间没有通信,要么就是这个。祝你好运