2016-10-18 2 views
1

Я пытаюсь отправить данные с помощью веб-сервиса rest в Java. Я могу отправлять данные с помощью Java в POST, но теперь мне нужно отправить данные в rawModeData, и мне также нужно отправить JSONArray в файл surveyData.Передача json-массива в пару значений ключа в Java

Вы можете найти прилагаемый скриншот

enter image description here

Это код, который я использую для передачи данных

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; 
    } 

Я получаю сообщение об ошибке 401

+2

401 - ошибка аутентификации, вам нужно предоставить учетные данные? – dahui

+0

На самом деле мне не нужно предоставлять никаких учетных данных, мне просто нужно синхронизировать данные. Я думаю, что я делаю что-то неправильно с отправкой его в rawModeData – Luffy

ответ

0
  • Вы не подключаетесь к подключению , Также я думаю, что вам нужно установитьFixedLengthStreamingMode на соединение и написать вывод как массив байтов. Пример:
//... 
    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(); 
} 
+0

Я пробовал ваш ответ, но это не сработало для меня .... :( – Luffy

1

Я думаю, вы пропустили какой-то маркер аутентификации в заголовках. Что-то вроде: httpURLConnection.setRequestProperty («tokenKey», «yourAuthToken»);

Смежные вопросы