在Java中以键值对传递json数组
我正在尝试使用Java中的RESTWebService发送数据。我可以在post中使用Java发布数据,但现在我需要在rawModeData中发送数据,还需要在surveysData键中发送JSONArray 请查找附加的屏幕截图 这是我用来发送数据的代码在Java中以键值对传递json数组,java,json,rest,Java,Json,Rest,我正在尝试使用Java中的RESTWebService发送数据。我可以在post中使用Java发布数据,但现在我需要在rawModeData中发送数据,还需要在surveysData键中发送JSONArray 请查找附加的屏幕截图 这是我用来发送数据的代码 try { URL url = new URL(webServiceData.getSyncSurveyDataUrl()); HttpURLConnection httpURLConnection = (
try {
URL url = new URL(webServiceData.getSyncSurveyDataUrl());
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
// ConnectionType
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setAllowUserInteraction(false);
httpURLConnection.setRequestProperty("charset", "utf-8");
httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// Create the output form content
OutputStream out = httpURLConnection.getOutputStream();
Writer writer = new OutputStreamWriter(out, "UTF-8");
JSONObject objects = new JSONObject();
objects.put("constituency", constituency);
objects.put("longitude", longitude);
objects.put("latitude", latitude);
objects.put("createdOn", createdOn);
for (Map.Entry<String, String> map : linkedHashMap.entrySet()) {
objects.put(map.getKey(), map.getValue());
}
writer.write("createdByDeviceId");
writer.write("=");
writer.write(URLEncoder.encode(loginModel.getDeviceId(), "UTF-8"));
writer.write("&");
writer.write("createdByMobileNumber");
writer.write("=");
writer.write(URLEncoder.encode(loginModel.getMobileNumber(), "UTF-8"));
writer.write("&");
writer.write("state");
writer.write("=");
writer.write(URLEncoder.encode(loginModel.getLoggedInState(), "UTF-8"));
writer.write("&");
writer.write("eventId");
writer.write("=");
writer.write(URLEncoder.encode(loginModel.getEventId(), "UTF-8"));
writer.write("&");
writer.write("surveysData");
writer.write("=");
writer.write(URLEncoder.encode(objects.toString(), "UTF-8"));
if (httpURLConnection.getResponseCode() != 200) {
System.out.println("Exception in 200: " + httpURLConnection.getResponseCode());
System.out.println("Exception Message: " + httpURLConnection.getResponseMessage());
/*errorLabel.setText(httpURLConnection.getResponseMessage());
errorLabel.setVisible(true);*/
}
} catch (Exception e) {
return false;
}
试试看{
URL URL=新URL(webServiceData.getSyncSurveyDataUrl());
HttpURLConnection HttpURLConnection=(HttpURLConnection)url.openConnection();
//连接类型
httpURLConnection.setRequestMethod(“POST”);
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
httpURLConnection.setUseCaches(false);
httpURLConnection.setAllowUserInteraction(false);
setRequestProperty(“字符集”、“utf-8”);
httpURLConnection.setRequestProperty(“内容类型”,“应用程序/x-www-form-urlencoded”);
//创建输出表单内容
OutputStream out=httpURLConnection.getOutputStream();
Writer Writer=新输出流Writer(out,“UTF-8”);
JSONObject objects=新的JSONObject();
反对。付诸表决(“选区”,选区);
对象。放置(“经度”,经度);
物体。放置(“纬度”,纬度);
objects.put(“createdOn”,createdOn);
对于(Map.Entry映射:linkedHashMap.entrySet()){
objects.put(map.getKey(),map.getValue());
}
writer.write(“createdByDeviceId”);
作者:写(“=”);
write(URLEncoder.encode(loginModel.getDeviceId(),“UTF-8”);
作者:写(&);
writer.write(“createdByMobileNumber”);
作者:写(“=”);
write(URLEncoder.encode(loginModel.getMobileNumber(),“UTF-8”);
作者:写(&);
作者:写(“州”);
作者:写(“=”);
write(URLEncoder.encode(loginModel.getLoggedInState(),“UTF-8”);
作者:写(&);
writer.write(“eventId”);
作者:写(“=”);
write(URLEncoder.encode(loginModel.getEventId(),“UTF-8”);
作者:写(&);
编写(“调查数据”);
作者:写(“=”);
write(URLEncoder.encode(objects.toString(),“UTF-8”);
if(httpURLConnection.getResponseCode()!=200){
System.out.println(“200中的异常:+httpURLConnection.getResponseCode());
System.out.println(“异常消息:+httpURLConnection.getResponseMessage());
/*errorLabel.setText(httpURLConnection.getResponseMessage());
errorLabel.setVisible(真)*/
}
}捕获(例外e){
返回false;
}
我收到401错误消息- 您没有连接到连接。此外,我认为您需要在连接上设置FixedLengthStreamingMode,并将输出写入字节数组。例如:
公共静态字符串formatQueryParameters(映射请求数据)引发UnsupportedEncodingException{
字符串等于=URLEncoder.encode(“=”,“UTF-8”);
字符串和=URLEncoder.encode(“&”,“UTF-8”);
StringBuilder=新的StringBuilder();
for(Map.Entry:requestData.entrySet()){
字符串encodedKey=URLEncoder.encode(entry.getKey(),“UTF-8”);
字符串encodedValue=URLEncoder.encode(entry.getValue(),“UTF-8”);
append(encodedKey).append(equals).append(encodedValue).append(与符号);
}
builder.deleteCharAt(builder.lastIndexOf(ampersand));
返回builder.toString();
}
我认为您在标题中遗漏了一些身份验证令牌。类似于:httpURLConnection.setRequestProperty(“tokenKey”、“yourAuthToken”) 401是身份验证错误,您需要提供凭据吗?实际上我不需要提供任何凭据,我只需要同步数据。我想我把它发送到rawModeData是做错了
//...
String queryParameters = formatQueryParameters(requestData);
byte[] output = queryParameters.getBytes(Charset.forName("UTF-8"));
connection.setFixedLengthStreamingMode(output.length);
connection.connect();
DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());
dataOutputStream.write(output);
//...
public static String formatQueryParameters(Map<String, String> requestData) throws UnsupportedEncodingException {
String equals = URLEncoder.encode("=", "UTF-8");
String ampersand = URLEncoder.encode("&", "UTF-8");
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, String> entry : requestData.entrySet()) {
String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
String encodedValue = URLEncoder.encode(entry.getValue(), "UTF-8");
builder.append(encodedKey).append(equals).append(encodedValue).append(ampersand);
}
builder.deleteCharAt(builder.lastIndexOf(ampersand));
return builder.toString();
}