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();

который, я уверен, может быть улучшен, но пока он работает.

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