Clamav-rest Spring 3.2 RestTemplate приводит к 400 неправильных запросов
Я пытаюсь отправить файл в приложение Spring Boot clamav-rest. Команда curl работает нормально. Вот вывод,
curl -k -F name="test file" -F file=@"myfile.pdf" https://clamav.my.org/scan
POST / сканирование HTTP/1.1 Ведущий: clamav.my.org Пользователь-агент: curl/7.56.1 Принять: */* Контент-длина: 22834 Content-Type: multipart/form-data; граница =------------------------5814453ea3a5f3e0 Ожидайте: 100-продолжение HTTP/1.1 100 Продолжить HTTP/1.1 200 ОК Дата: четверг, 18 января 2018 23:19:10 по Гринвичу Тип содержимого: текст / обычный; кодировка =utf-8 Длина контента: 21 Все ок: правда
Я использую Spring 3.2, чтобы сделать вызов REST, что приводит к ошибке 400 Bad Request.
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("name", "fileUpload.obj");
parts.add("file", in);
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> requestEntity =
new HttpEntity<MultiValueMap<String, Object>>(parts, headers);
ResponseEntity<String> responseEntity =
restTemplate.exchange("https://clamav.my.org/scan", HttpMethod.POST, requestEntity, String.class);
String body = (String) responseEntity.getBody();
Вот выход журнала
Создан POST-запрос для "https://clamav.my.org/scan" Установка запроса Примите заголовок к [text/plain, application/json, application/*+json, */*] Запись [{name=[fileUpload.obj], file=[[B@fe97ef91]}] как "multipart/form-data" с использованием [org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@4885d075] Запрос POST для "https://clamav.my.org/scan" привел к 400 (неверный запрос); вызов обработчика ошибок Создан POST-запрос для "https://clamav.my.org/scan" Установка запроса Примите заголовок к [text/plain, application/json, application/*+json, */*] Запись [{file=[[B@fe97ef91]}] с использованием [org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter@e8e8b3fa] Запрос POST для "https://clamav.my.org/scan" привел к 400 (неверный запрос); вызов обработчика ошибок
Я пробовал несколько итераций и искал повсюду пример кода. Есть мысли о том, как сделать успешный запрос? ТИА
1 ответ
Решение
Нашел ответ в соответствующем посте, отправка-файл-над-пружиной-отдых-сервис-через-рестлет
Вызов RestTemplate сейчас,
RestTemplate restTemplate = new RestTemplate();
FormHttpMessageConverter converter = new FormHttpMessageConverter();
restTemplate.getMessageConverters().add(converter);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
MultipartByteArrayResource resource = new MultipartByteArrayResource(in);
resource.setFilename("fileUpload.obj");
MultiValueMap<String, Object> parts = new LinkedMultiValueMap<String, Object>();
parts.add("name", "fileUpload.obj");
parts.add("file", resource);
HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<MultiValueMap<String, Object>>(parts,
headers);
ResponseEntity<String> responseEntity = restTemplate.exchange("https://clamav.my.org/scan",
HttpMethod.POST, requestEntity, String.class);
String body = (String) responseEntity.getBody();
который, я уверен, может быть улучшен, но пока он работает.