Spring Boot - Multipart - неподдерживаемый тип носителя - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу отправить файл и модель json за один почтовый запрос.

Мое сопоставление запроса выглядит так:

    @PostMapping("{id}/files")
    public MyOutput create(@PathVariable String id, @RequestPart("request") MyInput input, @RequestPart("file") MultipartFile file) {
    // ...
    }

Полученная ошибка:

{
    "timestamp": "Feb 7, 2019, 3:18:50 PM",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'application/octet-stream' not supported",
    "trace": "org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/octet-stream' not supported...,
    "path": "/tests/12345/files"
}

Запрос почтальона: http://imgshare.free.fr/uploads/62f4cbf671.jpg

Мой WebConfig:

    @Override
    public void configureMessageConverters(final List<HttpMessageConverter<?>> converters) {

        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.setPrettyPrinting().create();

        final GsonHttpMessageConverter msgConverter = new GsonHttpMessageConverter();
        msgConverter.setGson(gson);
        msgConverter.setDefaultCharset(StandardCharsets.UTF_8);
        converters.add(msgConverter);

        converters.add(new StringHttpMessageConverter());

        //
        converters.add(new ByteArrayHttpMessageConverter());
        converters.add(new FormHttpMessageConverter());
        converters.add(new ResourceHttpMessageConverter());

    }

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете попробовать использовать вместо этого

@RequestPart("file") MultipartFile file

использовать это

@RequestParam(value = "file",required = false) MultipartFile file

И убедитесь, что вы установили тип запроса как multipart / form-data. Вы можете установить его изпочтальон во вкладке заголовков.

postman example

Если другой объект вам нужно отправить с составным файлом, вы можете отправить его в виде строки, а затем вы можете конвертироватьэто объект на стороне сервера.

  @PostMapping("/upload")
    public void   uploadFile(@Nullable @RequestParam(value = "file",required = false) MultipartFile file,
                                                 @RequestParam(value="input",required = false)String st)
    {
        ObjectMapper om=new ObjectMapper();
       MyInput input =null;
        try {
            input=om.readValue(st,MyInput.class);   //string st -> MyInput input
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Пример запроса почтальона:

enter image description here

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