使用Java发送JSON消息

时间:2017-05-18 01:01:36

标签: java json http-post

我正在试图发送这条json消息:

  

{ “ruido_exterior”:0 “co2_exterior”:0 “humedad_interior”:0 “ruido_interior”:0 “temperatura_exterior”:0 “co_interior”:0 “co2_interior”:0 “co_exterior”: 0 “temperatura_interior”:0 “pm_25”:8中, “pm_10”:10 “humedad_exterior”:0, “时间戳”:1494978084000}

代码

public static void sendRequestPostRenam(JSONObject json) throws IOException, JSONException {

        CloseableHttpClient httpClient = HttpClientBuilder.create().build();

        try {

            URIBuilder builder = new URIBuilder(Config.urlJSON).addParameter("access-token", Config.renamToken);

            HttpPost request = new HttpPost(builder.build());
            StringEntity params = new StringEntity(json.toString());

            request.setEntity(params);

            CloseableHttpResponse response = httpClient.execute(request);

            //<editor-fold defaultstate="collapsed" desc="PRUBEAS DEBUG">
            String content = EntityUtils.toString(response.getEntity());
            Log.debug(content);
            //</editor-fold>

            int statusCode = response.getStatusLine().getStatusCode();

            Log.debug("[STATUS:" + statusCode + "]");

        } catch (Exception ex) {
            Log.debug(ex.toString());
        } finally {
            httpClient.close();
        }
    }

内容的输出为:

  

{“status”:“error”,“info”:{“timestamp”:[“Timestamp no puedeestavvacío。”]},“timestamp”:1495068046}

消息显示“时间戳不能为空”,但在变量“参数”中包含时间戳值。看起来请求对象没有这个json值。

编辑1:

我要解释我需要做什么。我必须通过Json将一些数据发送到API。它具有访问令牌身份验证,如果我使用curl,我在发送数据时没有任何问题:

  

curl -X POST -H'Content-Type:application / json'-d'{“pm25”:35,“timestamp”:147805158}'https://api.com/data/insert?access-token= {Yoq3UGQqDKP4D1L3Y6xIYp-Lb6fyvavpF3Lm-8cD}

作为最后一个命令的结果,答案是:

  

{ “状态”: “OK”, “信息”:[], “时间戳”:1495072199}

任何帮助都会真正得到帮助。

1 个答案:

答案 0 :(得分:0)

我无法对您的帖子发表评论,因此请将查询作为答案粘贴在此处。

如果我没有错过任何内容,那么您打印的内容取决于您呼叫的远程服务中定义的处理和业务逻辑。您应该提供有关远程服务的更多详细信息。

无论如何,您可以尝试在请求HttpPost对象时添加内容类型的标头。      System.out.println(sux); // Count successes and print or check for botch int gtNumber = 0; for(int s = 0; s < sux.size(); s++){ if(sux.get(s) >= 7) { gtNumber++; System.out.println(s + " successes!"); } } if(gtNumber == 0){ System.out.println("BOTCH!"); } }