Как передать json в качестве параметра запроса в веб-службе Rest Post в java

Как передать json в качестве параметра запроса в веб-службе Rest Post в java

Например:

https://testvpa.net/WebService/ViALoggingRestWS/ViALoggingService.svc/StartCall?parameter={"machineName":"KK-IVR01","appName":"KKApp","startTime":"2018-02-06T21:38:32","portID":"01","ani":"9189280000","dnis":"8559281111","ctiCallID":"01"}

Я пытаюсь что-то вроде этого:

....

try{
    JSONObject obj = new JSONObject();
    obj.put("machineName",machineName);
    obj.put("appName", appName);
    obj.put("startTime", formattedCurrentDate);
    obj.put("portID",portID);
    obj.put("ani",ani);
    obj.put("dnis", dnis);
    obj.put("ctiCallID", ctiCallID);

    String strobj = obj.toString();

    String uri = wsUri+"/StartCall?";

    HttpClient client = new HttpClient();
    client.getParams().setConnectionManagerTimeout(1300);
    client.getParams().setSoTimeout(13000);

    PostMethod method = new PostMethod(uri);
    method.addRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    method.setQueryString("parameter="+strobj );

    int statusCode = client.executeMethod(method);

    byte[] responseBody = method.getResponseBody();
    output = new String(responseBody);
}

....

Но я получаю «Недопустимый URI» во время выполнения. Кажется, что параметр запроса не является строкой json. Я где-то читал о кодировании строки json... Нужно ли как-то кодировать строку json?


person RGabriel    schedule 28.02.2018    source источник


Ответы (2)


Вы можете проверить этот вопрос для получения более подробной информации: Какие символы делают URL-адрес недействительным?

Вообще говоря, допустимые символы в URI: [A-Z][a-z][0-9]-._~

Также разрешены следующие символы, но они имеют особое значение в некоторых частях URI: :/?#[]@!$&'()*+,;=

Все остальные символы не допускаются и должны быть закодированы в процентах. Второй набор символов также должен быть закодирован в процентах, чтобы избежать проблем с синтаксическим анализом.

Чтобы закодировать символ в процентах, вы берете его шестнадцатеричное значение (например, для символа space шестнадцатеричное значение равно 20) и добавляете к нему префикс символа %. Итак, John Doe становится John%20Doe.

person Miguel Almeida    schedule 28.02.2018

Если вы используете запрос POST, вы должны передать объект json в теле запроса, а не в параметрах запроса.

person Tamir Adler    schedule 28.02.2018