Загрузите файл multipart / form-data в Spring boot и REST API - PullRequest
0 голосов
/ 12 июня 2018

Я хочу загрузить файл .png и хранилище, которое. Когда я отправляю его с content-type = multipart / form-data, я получаю это исключение

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 
  'application/octet-stream' not supported . 

Я думаю, что мое приложение не понимаетform-data contentType и выдает неактуальное исключение.Что не так?

    @Controller
    public class ProfileController {
        private static final Logger logger = LoggerFactory.getLogger(ProfileController.class);

        @Autowired
        ProfileService service;

        //http : http --pretty all --form PUT localhost:8080/profile/v1?thumb=glb
        @PutMapping(value = "/v1")
        public Mono<ResponseEntity<String>> upload(@RequestPart(value = "thumb", required = false) String thumbFilterName,
                                                   @RequestPart(value = "genthumb", required = false) String genthumb,
                                                   @RequestPart("hash") String hash,
                                                   @RequestPart("uploader") Long uploader,
                                                   @RequestPart("file") MultipartFile file) throws Exception {


        System.out.println(thumbFilterName);
        System.out.println(gentumb);
        System.out.println(uploader);
        System.out.println(file);
//and doing storage stuff!
return Mono.just(ResponseEntity.ok().build());
        }
    }

и это мой клиент Rest, который используется для отправки файла.Обратите внимание на ответ.

Это скриншоты restClient.Отправка файла с restClient:

sending file with restClient

И это настройки заголовков

and this is setting headers

1 Ответ

0 голосов
/ 12 июня 2018

В uploader вы должны изменить @RequestPart на @RequestParam

@RequestPart("uploader") Long uploader,

Javadoc объяснение :

Обратите внимание, что аннотация @RequestParam можеттакже может использоваться для связи части запроса «multipart / form-data» с аргументом метода, поддерживающим те же типы аргументов метода.Основное отличие состоит в том, что когда аргумент метода не является строкой, @RequestParam полагается на преобразование типа через зарегистрированный конвертер или PropertyEditor, тогда как @RequestPart полагается на HttpMessageConverters, принимая во внимание заголовок «Content-Type» части запроса.@RequestParam, вероятно, будет использоваться с полями формы имя-значение, в то время как @RequestPart, вероятно, будет использоваться с частями, содержащими более сложное содержимое (например, JSON, XML).

...