Не получается полный HTTP-ответ от HttpClient

Кажется, я не получаю весь ответ json от httpclient. Я нажимаю api, который я запускаю локально, вот так:

curl -i -X POST http://localhost:8098/<api location> -F "files=@<filename>"

И мой ответ выглядит так:

{"data":[<bunch of json>]

Но когда я пытаюсь опубликовать тот же файл с помощью httpclients, я получаю такой ответ:

{"data":[]}

Что я делаю не так? Вот мой код Java. Спасибо!

public CloseableHttpResponse submit (File file) throws IOException {
    CloseableHttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost(API_LOCATION + API_BASE);
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addBinaryBody("ISO xml file", file, ContentType.APPLICATION_OCTET_STREAM, file.getName());
    HttpEntity multipartEntity = builder.build();
    post.setEntity(multipartEntity);

    CloseableHttpResponse response = client.execute(post);
    System.out.println("response: " + IOUtils.toString(response.getEntity().getContent(),"UTF-8"));
    client.close();
    return response;
}

В curl вы называете поле files, но в Java вы называете его ISO xml file. Поскольку сервер ищет только files, он ничего не видит и ничего не отвечает.

Andreas 17.08.2018 21:56

А как насчет имени параметра? В curl вы использовали «файлы», а на http-клиенте вы использовали «файл ISO xml». Попробуйте изменить его на «файл».

Danilo Muñoz 17.08.2018 21:57

Я изменил "ISO xml файл" на "файлы", и это сработало. Я не осознавал значения этого поля - я думал, что это было просто для идентификации. Тогда каково значение строки в конце этой строки? Строка, которую я заполнил с помощью file.getName () ???

Jason Shapiro 17.08.2018 22:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
100
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упомянули Андреас и Данило в комментариях:

In curl you name the field files, but in Java you name it ISO xml file. Since server only looks for files, it see nothing, and responds with nothing. - Andreas

What about the parameter's name? On curl you used 'files' and on http client you used 'ISO xml file'. Try changing it to 'file'. - Danilo

Мне нужно было изменить «ISO xml файл» на «файлы», и это сработало.

Другие вопросы по теме