我正在尝试使用仅支持通过form-data或www-form-urlencoded属性传递JSON数据的REST API。所以,我的问题是,如何使用HttpUrlConnection附加多个表单数据项?当我通过浏览器使用API时,Chrome中的请求如下所示:
表单数据
的增加结果 更新: [{“attributes”:{“OBJECTID”:2241,“OTHER_FIELD”:“500”}}]
的删除:结果 的 gdbVersion:结果 的 rollbackOnFailure:结果 f: pjson
但我无法弄清楚如何在Java中复制它。
这是我到目前为止所尝试的:
HttpURLConnection urlConnection =(HttpURLConnection)url.openConnection();
urlConnection.setUseCaches(假);
urlConnection.setDoOutput(真);
urlConnection.setRequestMethod( “POST”);
urlConnection.addRequestProperty(“f”,“json”);
urlConnection.addRequestProperty(“adds”,null);
urlConnection.addRequestProperty(“updates”,“[{\”attributes \“:{\”OBJECTID \“:2241,\”OTHER_FIELD \“:\”500 \“}}]”);
urlConnection.addRequestProperty(“删除”,null);
urlConnection.addRequestProperty(“rollbackOnFailure”,“true”);
urlConnection.addRequestProperty(“gdbVersion”,null);
代码>
但它并没有附加数据......
对于那些感兴趣的人,我正在尝试连接到ArcGIS要素服务API,以便我可以添加,更新或删除功能,但在这里我使用的是ApplyEdits
答案 0 :(得分:4)
所以我想出了如何解决这个问题,以下是解决方案:
HttpURLConnection urlConnection =(HttpURLConnection)url.openConnection();
urlConnection.setDoOutput(真);
urlConnection.setRequestMethod( “POST”);
代码>
首先将请求设置为POST请求,并且会有一些输出
StringBuilder encodedUrl = new StringBuilder(“adds =”+ URLEncoder.encode(“[{\”attributes \“:{\”OBJECTID \“:2241,\”MAXIMOID_PRE \“:\”HYD \“ },“,”UTF-8“));
encodedUrl.append(“&updates =”+ URLEncoder.encode(“”,“UTF-8”));
encodedUrl.append(“&deletes =”+ URLEncoder.encode(“”,“UTF-8”));
encodedUrl.append(“&f =”+ URLEncoder.encode(“json”,“UTF-8”));
encodedUrl.append(“&rollbackOnFailure =”+ URLEncoder.encode(“true”,“UTF-8”));
encodedUrl.append(“&gdbVersion =”+ URLEncoder.encode(“”,“UTF-8”));
代码>
这是每个表单数据值的设置方式。每个键值只是一个java字符串,然后使用URLEncoder.encode对值进行编码。使用包含所有表单数据元素的字符串,然后将其写入输出流:
final BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(urlConnection.getOutputStream()));
bfw.write(encodedUrl);
bfw.flush();
bfw.close();
代码>
之后,可以接收并解析响应。