Как реализовать загрузку файла с помощью клиента feign

У меня есть URL-адрес, который загружает файл. Подпись URL-адреса: http://services.local/api/v1/downloadFile?messageId=11090.I хочу проксировать его с помощью фиктивного клиента. Каждый раз, когда я получаю исключение, сообщающее, что мой выходной поток закрыт.

Пт, 02 ноября, 16:18:47 IST 2018 Произошла непредвиденная ошибка (тип = внутренняя ошибка сервера, статус = 500). Не удалось написать JSON: для этого ответа уже был вызван метод getOutputStream(); вложенным исключением является com.fasterxml.jackson.databind.JsonMappingException: getOutputStream() уже был вызван для этого ответа (через цепочку ссылок: org.springframework.security.web.firewall.FirewalledResponse["response"]->org.springframework. security.web.header.HeaderWriterFilter$HeaderWriterResponse["response"]->org.springframework.security.web.context.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper["response"]->org.springframework.security.web.firewall.FirewalledResponse["response "]->org.apache.catalina.connector.ResponseFacade["писатель"])

Мой притворный клиент очень прост

 @FeignClient(name = "downloadAPI", url = "${service.ip}")
public interface DownloadApiProxy {

    @RequestMapping(method = RequestMethod.GET, value = "/downloadFile")
    public void downloadFile(HttpServletResponse response,
            @RequestParam(value = "downloadMessageId", required = false) String messageId);

person Soumyajit Swain    schedule 02.11.2018    source источник


Ответы (1)


У меня возникла та же проблема, когда я хочу сделать вызов API из одного микросервиса в другой микросервис, поэтому я сопоставил этот API, который возвращает byte[].

Итак, ваш код должен выглядеть так:

@FeignClient(name = "downloadAPI", url = "${service.ip}")
public interface DownloadApiProxy {

    @RequestMapping(method = RequestMethod.GET, value = "/downloadFile")
    public byte[] downloadFile(HttpServletResponse response, @RequestParam(value = "messageId", required = false) String messageId);

     :
     :
}

Он вернет загруженный файл в byte[].

Примечание. Параметр вашего запроса будет messageId, как в приведенном примере.

person Sunil Kanzar    schedule 03.04.2019