сервер возвращает java .io.IOException: сервер вернул код ответа HTTP: 400 для URL - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь вызвать rest API, который задокументирован так:

curl -X POST "https://url/api/v1/className/doSomething" -H "accept: application/json" -H "Authorization: Bearer token" -H "Content-Type: application/json" -d

Вот мой код отправляет http пост. Он хорошо работает со всеми http API, которые я использовал раньше, но не для этого.

        String result = "";

        RequestProcess process = LogManager.getInstance().newProcess();
        process.setProcessName(url);
        process.setRequestContent(requestContent);

        ObjectMapper mapper = new ObjectMapper().registerModule(new Jdk8Module()).registerModule(new JavaTimeModule());


        String rawData = mapper.writeValueAsString(requestContent);

        String charset = "UTF-8";
        HttpURLConnection connection = (HttpURLConnection)new URL(url).openConnection();
        connection.setDoOutput(true);
        connection.setRequestProperty("Accept-Charset", charset);
        connection.setRequestProperty("Content-Type", "application/json;charset=" + charset);
        connection.setRequestProperty("User-Agent", USER_AGENT);
        connection.setRequestMethod("POST");

        try (OutputStream output = connection.getOutputStream()) {
            output.write(rawData.getBytes(charset));
        }

        InputStream inputStream = connection.getInputStream();
        result = StreamUtil.toString(inputStream);

        process.setResponseContent(result);
        LogManager.getInstance().endProcess(process);

        return result;

Я получаю сообщение об ошибке

java .io.IOException: сервер вернул код ответа HTTP: 400 для URL: url

Я пытался сделать то же самое с почтальоном, и это работает. Есть идеи?

Ответы [ 3 ]

0 голосов
/ 27 января 2020

Если он работает в POSTMAN, вы можете получить соответствующий запрос curl от него. Нажав на Code и выберите cURL из доступных вариантов. enter image description here

0 голосов
/ 28 января 2020

Я решил это, удалив charset в разделе Content-Type . После модификации эта строка выглядит следующим образом

connection.setRequestProperty("Content-Type", "application/json");
0 голосов
/ 27 января 2020

Что вы отправляете в качестве данных? по крайней мере, вы должны отправить -d {} для пустых данных или удалить -d

...