将JSON对象插入JSOUP时出错

时间:2016-07-06 06:24:53

标签: java json jsoup saiku

我试图使用JSOUP将一些json对象发布到Saiku Server中。这是我的代码。

Response document1 = Jsoup
         .connect(
           "http://localhost:8080/saiku/rest/saiku/admin/datasources/")
           .header("Content-Type", "application/json")
           .data(testJson.toJSONString())
     .ignoreContentType(true)
         .referrer("http://localhost:8080/")
         .cookie("JSESSIONID", res.cookie("JSESSIONID"))
          .userAgent(
           "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36")
         .method(Method.POST).timeout(10000).execute();

我收到错误

 Errorjava.lang.IllegalArgumentException: Must supply an even number of key value pairs .

我在很多网站上搜索过但无法找到解决方法。有人可以澄清我。提前致谢。我在这里附上我的代码,

2 个答案:

答案 0 :(得分:1)

根据javadoc

sink("temp.csv")
print(mylist)
sink(NULL)
  

添加许多请求数据参数。可以一次设置多个参数,例如:.data(“name”,“jsoup”,“language”,“Java”,“language”,“English”);创建一个查询字符串,如:?name = jsoup& language = Java& language = English

我认为你需要:

Connection data(String... keyvals)
  

设置POST(或PUT)请求正文。当服务器需要普通请求主体而不是URL编码形式键/值对

的集合时很有用

答案 1 :(得分:1)

我使用requestBody()发布JSON对象.requestBody()方法仅在JSOUP 1.9.1 jar中可用,我发布了以下代码供您参考。

    // JSON Object
    JSONObject testJson = new JSONObject();

    testJson.put("connectionname", "drinkss");
    testJson.put("jdbcurl", "jdbc:mysql://localhost/drink");
    testJson.put("schema", "datasources/dr.xml");
    testJson.put("driver", "com.mysql.jdbc.Driver");
    testJson.put("username", "root");
    testJson.put("password", "211218");
    testJson.put("connectiontype", "MONDRIAN");

    // For Posting datasource into server
    Response document1 = Jsoup
            .connect(
                    "http://localhost:8080/saiku/rest/saiku/admin/datasources/")
            .header("Content-Type", "application/json")
            .requestBody(testJson.toString())
            .data(testJson)
            .ignoreContentType(true)
            .referrer("http://localhost:8080/")
            .cookie("JSESSIONID", res.cookie("JSESSIONID"))
            .userAgent(
                    "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.94 Safari/537.36")
            .method(Method.POST).timeout(10000).execute();
    System.out.println("post successfully....."
            + testJson.toJSONString());