繁体   English   中英

在 Java 中的键值对中传递 json 数组

[英]Passing json array in a key value pair in Java

我正在尝试使用 Java 中的 rest webservice 发送数据。 我可以在 POST 中使用 Java 发布数据,但现在我需要在 rawModeData 中发送数据,我还需要在surveysData键中发送 JSONArray 。

请找到随附的屏幕截图

在此处输入图片说明

这是我用来发送数据的代码

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 错误消息

我认为您错过了标头中的一些身份验证令牌。 类似于: httpURLConnection.setRequestProperty("tokenKey", "yourAuthToken");

  • 您没有连接到 connection 另外我认为您需要在连接上设置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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM