Кажется, я не получаю весь ответ 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 вы использовали «файлы», а на http-клиенте вы использовали «файл ISO xml». Попробуйте изменить его на «файл».
Я изменил "ISO xml файл" на "файлы", и это сработало. Я не осознавал значения этого поля - я думал, что это было просто для идентификации. Тогда каково значение строки в конце этой строки? Строка, которую я заполнил с помощью file.getName () ???




Как упомянули Андреас и Данило в комментариях:
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 файл» на «файлы», и это сработало.
В curl вы называете поле
files, но в Java вы называете егоISO xml file. Поскольку сервер ищет толькоfiles, он ничего не видит и ничего не отвечает.