Получение изображения в виде потока через Java Spring Boot через REST POST - PullRequest
0 голосов
/ 12 февраля 2020

Я создаю проект в Java с помощью Spring Boot. Основное внимание уделяется получению изображения, которое преобразуется в поток, и мой код преобразует это изображение в файл PDF и отправляет этот PDF обратно в виде потока. Несмотря на анализ, я не могу пройти начало, получая поток ...

Здесь вы увидите фрагмент моего звонка почтальона в работающий проект enter image description here

Мой Контроллер выглядит так:

@RestController
public class Controller {
    @PostMapping(value = "/convert/{format}", consumes = "application/octet-stream", produces = "application/octet-stream")
    @ResponseBody
    public void convert(RequestEntity<InputStream> entity, HttpServletResponse response, @PathVariable String format, @RequestParam Map<String, String> params) throws IOException {
        if ("pdf".equalsIgnoreCase(format)) { 
            PDFConverter cnv = new PDFConverter();
            /*cnv.convert(entity.getBody(), response.getOutputStream(), params);*/
            response.setContentType("application/octet-stream");
            response.getOutputStream().println("hello binary");
        } else {
            // handle other formats
            throw new IllegalArgumentException("illegal format: " + format);
        }
    }
}

Что я упускаю из виду в этом случае?

Ответы [ 3 ]

1 голос
/ 13 февраля 2020

Я нашел решение, в контроллере, который я использовал RequestEntity<InputStream> entity, это дало ошибку. После изменения на HttpServletRequest request все заработало.

@RestController
public class Controller {
    @RequestMapping(value="/convert/{format}", method=RequestMethod.POST)
    public @ResponseBody void convert(HttpServletRequest request, HttpServletResponse response, @PathVariable String format, @RequestParam Map<String, String> params) {
        try{
            if ("pdf".equalsIgnoreCase(format)) {
                PDFConverter cnv = new PDFConverter();
                response.setContentType("application/pdf");
                cnv.convert(request.getInputStream(), response.getOutputStream(), params);
            } else {
                // handle other formats
                throw new IllegalArgumentException("illegal format: " + format);
            }
        } catch (IllegalArgumentException | IOException e) {
            e.printStackTrace();
        }
    }
}
0 голосов
/ 12 февраля 2020

Я думаю, что вы используете потоковый API commons-fileupload. Это не будет работать, если spring.http.multipart.enabled=true, из-за предварительной обработки запроса. Можете ли вы попробовать установить spring.http.multipart.enabled=false, а также изменить consumes = { MediaType.MULTIPART_FORM_DATA_VALUE },

0 голосов
/ 12 февраля 2020

Как уже сообщается в сообщении об ошибке, ваш тип контента недействителен. Вы ожидаете другого типа контента, чем вы отправляете. Возможно, проблема заключается в том, что вы добавляете определение набора символов в запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...