2016-07-06 3 views
1

Я пытался отправить некоторые объекты json на сервер Saiku с помощью JSOUP. Вот мой код.Ошибка при вставке объекта JSON в JSOUP

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 . 

Я искал во многих местах, но не в состоянии найти решение этой проблемы. Может кто-то уточнить меня. Заранее спасибо. я прикрепил свой код здесь,

ответ

1

Я использую requestBody() для размещения в JSON object.The 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()); 
+0

Thanks Buddy, It Works. –

1

Согласно javadoc:

Connection data(String... keyvals) 

Добавить ряд параметров запроса данных. Несколько параметров могут быть установлены сразу, например: .data («имя», «jsoup», «язык», «Java», «язык», «английский»); создает строку запроса, как: имя = jsoup & язык = Java & язык = английский

Я думаю, что вам нужно:

Connection requestBody(String body) 

Установка (POST или PUT) тело запроса. Полезно, когда сервер ожидает простой тело запроса, а не набор для URL-кодированном виде пар ключ/значение

Смежные вопросы