Java 如何使用HttpURLConnection在请求正文中发送数据?

Java 如何使用HttpURLConnection在请求正文中发送数据?,java,web-services,httpurlconnection,microservices,spark-java,Java,Web Services,Httpurlconnection,Microservices,Spark Java,我正在使用HttpURLConnection向本地部署并使用javaspark创建的本地服务发出POST请求当我使用HttpURLConnection进行POST调用时,我想在请求正文中发送一些数据,但每次JAVA Spark中的请求正文都为空。下面是我用于此目的的代码 Java Spark POST服务处理程序 进行POST调用的HTTPClass 您应该调用httpCon.connect()仅在将参数写入正文之后,而不是之前。您的代码应该如下所示: URL url = new URL("ht

我正在使用
HttpURLConnection
向本地部署并使用javaspark创建的本地服务发出POST请求当我使用
HttpURLConnection
进行POST调用时,我想在请求正文中发送一些数据,但每次JAVA Spark中的请求正文都为空。
下面是我用于此目的的代码

Java Spark POST服务处理程序 进行POST调用的HTTPClass
您应该调用
httpCon.connect()仅在将参数写入正文之后,而不是之前。您的代码应该如下所示:

URL url = new URL("http://localhost:4567/");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestMethod("POST");
OutputStream os = httpCon.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");    
osw.write("Just Some Text");
osw.flush();
osw.close();
os.close();  //don't forget to close the OutputStream
httpCon.connect();

//read the inputstream and print it
String result;
BufferedInputStream bis = new BufferedInputStream(httpCon.getInputStream());
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result2 = bis.read();
while(result2 != -1) {
    buf.write((byte) result2);
    result2 = bis.read();
}
result = buf.toString();
System.out.println(result);

我以XML格式发布了请求的数据,代码如下所示。您还应该添加请求属性Accept和内容类型

URL url = new URL("....");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

httpConnection.setRequestMethod("POST");
httpConnection.setRequestProperty("Accept", "application/xml");
httpConnection.setRequestProperty("Content-Type", "application/xml");

httpConnection.setDoOutput(true);
OutputStream outStream = httpConnection.getOutputStream();
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
outStreamWriter.write(requestedXml);
outStreamWriter.flush();
outStreamWriter.close();
outStream.close();

System.out.println(httpConnection.getResponseCode());
System.out.println(httpConnection.getResponseMessage());

InputStream xml = httpConnection.getInputStream();

看来这不是真的。调用
getOutputStream
调用
connect
。如果要显式连接,请在
getOutputStream
之前调用
connect
。要测试您自己,请禁用internet,当连接失败时,您将看到名为
connect
getOutputStream
失败。
URL url = new URL("http://localhost:4567/");
HttpURLConnection httpCon = (HttpURLConnection) url.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestMethod("POST");
OutputStream os = httpCon.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");    
osw.write("Just Some Text");
osw.flush();
osw.close();
os.close();  //don't forget to close the OutputStream
httpCon.connect();

//read the inputstream and print it
String result;
BufferedInputStream bis = new BufferedInputStream(httpCon.getInputStream());
ByteArrayOutputStream buf = new ByteArrayOutputStream();
int result2 = bis.read();
while(result2 != -1) {
    buf.write((byte) result2);
    result2 = bis.read();
}
result = buf.toString();
System.out.println(result);
URL url = new URL("....");
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

httpConnection.setRequestMethod("POST");
httpConnection.setRequestProperty("Accept", "application/xml");
httpConnection.setRequestProperty("Content-Type", "application/xml");

httpConnection.setDoOutput(true);
OutputStream outStream = httpConnection.getOutputStream();
OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream, "UTF-8");
outStreamWriter.write(requestedXml);
outStreamWriter.flush();
outStreamWriter.close();
outStream.close();

System.out.println(httpConnection.getResponseCode());
System.out.println(httpConnection.getResponseMessage());

InputStream xml = httpConnection.getInputStream();