Как реализовать загрузку файла с помощью симулированного клиента - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть 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 [ "ответ"] -> org.springframework.security.web.context.HttpSessionSecurityContextRepository $ SaveToSessionResponseWrapper [ "ответ"] -> org.springframework.security.web.firewall.FirewalledResponse [ "ответ "] -> 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);

1 Ответ

0 голосов
/ 03 апреля 2019

У меня возникла та же проблема, когда я хочу сделать вызов 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 в качестве примера.

...