当前位置: 首页 > 面试题库 >

JAVA中带有JSON字符串的HTTP POST请求

法子昂
2023-03-14
问题内容

我必须使用已经生成的JSON字符串发出http Post请求。我尝试了两种不同的方法:

1.HttpURLConnection
2.HttpClient

但是我从两个人那里得到了相同的“不需要的”结果。到目前为止,我使用 HttpURLConnection的 代码是:

public static void SaveWorkflow() throws IOException {
    URL url = null;
    url = new URL(myURLgoeshere);
    HttpURLConnection urlConn = null;
    urlConn = (HttpURLConnection) url.openConnection();
    urlConn.setDoInput (true);
    urlConn.setDoOutput (true);
    urlConn.setRequestMethod("POST");
    urlConn.setRequestProperty("Content-Type", "application/json");
    urlConn.connect();

    DataOutputStream output = null;
    DataInputStream input = null;
    output = new DataOutputStream(urlConn.getOutputStream());

                /*Construct the POST data.*/
    String content = generatedJSONString;

    /* Send the request data.*/
    output.writeBytes(content);
    output.flush();
    output.close();

    /* Get response data.*/
    String response = null;
    input = new DataInputStream (urlConn.getInputStream());
    while (null != ((response = input.readLine()))) {
        System.out.println(response);
        input.close ();
    }
}

到目前为止,我使用 HttpClient的 代码是:

public static void SaveWorkflow() {
    try {

        HttpClient httpClient = new DefaultHttpClient();
        HttpPost postRequest = new HttpPost(myUrlgoeshere);
        StringEntity input = new StringEntity(generatedJSONString);
        input.setContentType("application/json;charset=UTF-8");
        postRequest.setEntity(input);
        input.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json;charset=UTF-8"));
        postRequest.setHeader("Accept", "application/json");
        postRequest.setEntity(input);

        HttpResponse response = httpClient.execute(postRequest);

        BufferedReader br = new BufferedReader(
                        new InputStreamReader((response.getEntity().getContent())));

        String output;

        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }

        httpClient.getConnectionManager().shutdown();

    } catch (MalformedURLException e) {

        e.printStackTrace();

    } catch (IOException e) {

        e.printStackTrace();

    }
}

生成的JsonString如下所示:

{"description":"prova_Process","modelgroup":"","modified":"false"}

我得到的答复是:

{"response":false,"message":"Error in saving the model. A JSONObject text must begin with '{' at 1 [character 2 line 1]","ids":[]}

有什么想法吗?


问题答案:

最后,我设法找到了解决问题的方法…

public static void SaveWorkFlow() throws IOException
    {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost post = new HttpPost(myURLgoesHERE);
        List<NameValuePair> params = new ArrayList<>();
        params.add(new BasicNameValuePair("task", "savemodel"));
        params.add(new BasicNameValuePair("code", generatedJSONString));
        CloseableHttpResponse response = null;
        Scanner in = null;
        try
        {
            post.setEntity(new UrlEncodedFormEntity(params));
            response = httpClient.execute(post);
            // System.out.println(response.getStatusLine());
            HttpEntity entity = response.getEntity();
            in = new Scanner(entity.getContent());
            while (in.hasNext())
            {
                System.out.println(in.next());

            }
            EntityUtils.consume(entity);
        } finally
        {
            in.close();
            response.close();
        }
    }


 类似资料:
  • 我有以下JSON字符串: 我只想要和。我试过这样的方法: 但我得到了以下错误: 我只使用过几次JSON。有人能帮我吗? 对我来说最好的例子是这样的,我在另一个例子中做过: 可能吗? 现在我已经做到了: 我试着这样做: 然后: 但现在当我做一个Prtinout时,我会得到和以前一样的错误:

  • 这个问题不难,我已经用自己的方法解决了,但我想听听你的意见,也许有什么方法可以让这成为一个改进的选择?Java 8-11。

  • 问题内容: 我对String串联感到困惑。 输出为: 50abc20 50abc1010 我想知道为什么在两种情况下都将 20 + 30 加在一起,但是 10 + 10 需要加上括号(s1)而不是串联到String(s2)。请在此处说明String运算符的工作方式。 问题答案: 加法保持关联。以第一种情况 在第二种情况下:

  • 问题内容: 我有一个HTTP客户端(目前)的Node.js应用程序。所以我在做: 这似乎是完成此任务的一种好方法。但是,我有些沮丧,我必须执行此步骤。这应该由一个公共库封装,但是我还没有看到它存在于node的库中,而且我不确定哪个标准的npm包可以完成它。有没有一种合理使用的更好的方法? url.format方法节省了构建自己的URL的工作。但理想情况下,请求的级别也应高于此级别。 问题答案: 检

  • 问题内容: 我试图理解字符串比较与字符串比较的输出。需要明确的是,我拥有使用==和equals比较两个字符串的类。我试图将==和equals()的输出合并为字符串。equals()的输出会连续显示,但==的输出不会 连续显示。使用Java的装箱功能,将与字符串连接的布尔值联系起来。equals和==都返回布尔值。那么为什么会有这种差异呢?有人可以解释吗? 输出 更新:答案 如果不使用s1 == s

  • 问题内容: 快速提问。是否有等效于@的Java字符串: 例如,我可以使用C#进行处理,并使其在处理时忽略转义字符,而不必这样做。是否有Java等效项? 嗯:stackoverflow正在向我逃脱..大声笑。第二个示例应为: c :(双反斜杠)文件夹(双反斜杠)aFile 问题答案: 没有。转义/外部化字符串是您唯一的选择。