Java 如何使用HttpUrlConnection发送JSON和附加文件
我需要在POST中将JSON和CSV文件发送到第三方API:Java 如何使用HttpUrlConnection发送JSON和附加文件,java,json,api,post,attachment,Java,Json,Api,Post,Attachment,我需要在POST中将JSON和CSV文件发送到第三方API: curl -H "aToken:$TOKEN" --form-string 'json={"project": "1234", "template": "5678","data":[{"date": "2017-05-26","place": "
curl -H "aToken:$TOKEN" --form-string 'json={"project": "1234", "template": "5678","data":[{"date": "2017-05-26","place": "my house"}, {"person":"alice"}]}' -F 'file=@path/to/file.csv' 'https://the.api.com/api/23/postData'
我更喜欢使用HTTPUrlConnection,但我的理解是,我一次只能发送一种类型的数据。也许我可以使用ProcessBuilder调用Curl,但我想找到一个本机java解决方案。在研究了这一点之后,Apache的HTTPClient似乎是最好的解决方案: 添加这些依赖项后:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.13</version>
</dependency>
API对内容有何期望?首先是JSON,然后是CSV?是的,基于他们的curl示例(虽然我不知道这是否会转化为httpurlconnection)。也许会有帮助。谢谢。这可能行得通,但我将使用支持良好的Apache库(如下所示)。
HttpEntity entity = MultipartEntityBuilder
.create()
.addTextBody("ID", "1234")
.addBinaryBody("CSVfile", new File("c:\\temp\\blah.csv"), ContentType.create("application/octet-stream"), "filename")
.build();
HttpPost httpPost = new HttpPost("http://www.apiTest.com/postFile");
httpPost.setEntity(entity);
HttpResponse response = httpClient.execute(httpPost);
HttpEntity result = response.getEntity();