【问题标题】:Pass Blank space in Json value in curl command string in Java在Java中的curl命令字符串中传递Json值中的空格
【发布时间】:2020-04-19 14:11:30
【问题描述】:

我正在使用 Java 中的 curl 命令字符串发送 POST 请求。我在值中有空格的命令字符串中传递 json。当编译器在 json 中遇到空格时出现错误。我需要保留空格并传递字符串 curl 命令中的值。请帮忙。如果有人可以重写我的 string[] 命令来帮助我理解我的错误,我会很棒。这是我的代码。

String[] command = { "curl", "-X", "POST", "http://my.url.com/add", "-H", "accept: application/json", "-H", "AuthorizationToken: 123", "-H", "Content-Type: application/json", "-d", "{\"FieldLabels\":\"Name,Status,Employee number\",\"FieldValues\":\"test7,Planned,Raj Kumar(123)\",\"Type\":\"BT\"}" };

            ProcessBuilder process = new ProcessBuilder(command);
            Process p;
            try 
            {
            p = process.start();
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            StringBuilder builder = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                            builder.append(line);
                            builder.append(System.getProperty("line.separator"));
            }
            String result = builder.toString();
            System.out.print(result);

            }
        catch (Exception e)
        {
        e.printStackTrace();
        }

        Error:

        {
          "message" : {
            "statusCode" : "500",
            "Status" : "Internal Server Error",
            "requestedURI" : "/api/EFormService/createEFormItemData",
            "error" : "Expected a ':' after a key at character 25 of {FieldLabels:Name,Status,Employee"
          }
        }

【问题讨论】:

    标签: java json string curl space


    【解决方案1】:

    尝试将 json 请求放在一个文件中,并在 curl 请求中使用以下格式

    --data "@<path/to/file>"
    

    '@'表示请求数据在文件中,路径如下。

    你的例子:

    数据:

    {"FieldLabels":"姓名、状态、员工 number","FieldValues":"test7,Planned,Raj Kumar(123)","Type":"BT"}

    此数据需要保存到文件中,例如:/tmp/reqData 那么下面是你的命令

    { "curl", "-X", "POST", "http://my.url.com/add", "-H", "accept: application/json", "-H", "AuthorizationToken: 123", "-H", "Content-Type: application/json", "-d", "@/tmp/reqData" };
    

    【讨论】:

    • 我无法从文件传递请求,因为接下来我还需要从 sql 传递数据。我在这里尝试先手动传递参数。
    • 然后尝试转义空格字符 { "curl", "-X", "POST", "my.url.com/add", "-H", "accept: application/json" , "-H", "AuthorizationToken: 123", "-H", "Content-Type: application/json", "-d", "{\"FieldLabels\":\"Name,Status,Employee\ number\ ",\"FieldValues\":\"test7,Planned,Raj\ Kumar(123)\",\"Type\":\"BT\"}" };
    • 如果我在空格前添加\,它仍然会抛出错误“非法转义字符”
    • 为什么不使用 HttpClient 来触发这个请求?
    • 嗨,Sarath,是的,如果我可以使用 httpclient 或 httpurlconnection 会很方便。我可以创建一个 json 对象。请提供我可以参考的任何链接设置连接头参数并在正文中传递 json 对象。
    【解决方案2】:

    我已经创建了 JSON 对象,打开了与 httpurlconnection 的连接,设置了标头参数并在正文中传递了 jason 对象。有效。谢谢萨拉特。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-14
      • 1970-01-01
      • 2022-01-09
      • 2014-09-04
      相关资源
      最近更新 更多