Как записать JSON в вызов API, используя Java HttpURLConnection? - PullRequest
0 голосов
/ 19 августа 2011

Мне нужно сделать междоменный вызов API с одного сервера на другой.В основном мне нужно сделать POST-запрос, чтобы отправить Json по проводам.Я использую Джексона для обработки анализа Json в обоих приложениях.Ниже приведен код, который я использую для выполнения запроса из одного домена.

URL url = new URL(url); //This is url to POST method of the Servlet on another domain
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod("POST");
jsonParser.writeValue(connection.getOutputStream(),dto);

Когда я запускаю приведенный выше код для выполнения запроса, doPost () на другом сервере выполняется правильно (поэтому выполняется вызов API), однако в InputStream ничего нет, например readLine ()вызов ниже возвращает ноль.

BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream( )));
reader.readLine() 

Как я могу правильно отправить Json, используя HttpUrLConnection (я пропускаю информацию о конфигурации)?Также как мне прочитать этот Json из сервлета как получателя этого вызова API? (Обратите внимание, как объяснено выше, этот вызов API вызывает сервлет в другом домене)

примечание: я проверил Использование java.net.URLConnection для запуска и обработки HTTP-запросов , но без помощи

Спасибо!

1 Ответ

1 голос
/ 19 августа 2011

Я проверил DOC API для класса Jackson ObjectMapper, для метода writeValue ( здесь ). Там говорится, что метод не закроет поток явно, если вы не установили его в JSonFactory.или когда вы закрываете Mapper.

Тогда, возможно, вам нужно будет добавить явный flush () и close () в OutputStream:

OutputStream out=connection.getOutputStream();
try {
    jsonParser.writeValue(out,dto);
    out.flush();
//catch and handle the exceptions if needed
} finally {
    out.close();
}
...