Spring @RequestParam для multipart / form-data - PullRequest
0 голосов
/ 24 сентября 2018

Прежде чем начать свой вопрос, английский не точен, потому что я кореец.

Я использую Spring Boot 1.5.14.

Я выполняю загрузку файлов с использованием FormData, и произошла ошибка 400.

1.Javascript

    var formData = new FormData();
    formData.append('autoSelect', 'autoSelect');
    formData.append('file', fileObj);

    $.ajax({
        url: '/api/portfolios/' + pofolNo + '/main-image',
        type: 'PUT',
        enctype: 'multipart/form-data',
        processData: false,
        contentType: false,
        data: formData,
        async: false,
    });

2.Spring Controller (не работает)

    @PutMapping("{pofolNo}/main-image")
    public CommonApiResponse changePortfolioMainImage(
        @PathVariable("pofolNo") Integer pofolNo,
        @RequestParam("autoSelect") String autoSelect,
        @RequestParam("mainImage") MultipartFile mainImage) {

        log.debug("check : {} / {} / {}", pofolNo, autoSelect, mainImage);
        return ok(null);
    }

Приведенный выше код приводит к ошибке 400, говорящей, что параметр autoSelect отсутствует.

Поэтому я проверяю HttpServletRequest.getParameter("autoSelect") следующим образом.

3.Пружинный контроллер (работает)

    @PutMapping("{pofolNo}/main-image")
    public CommonApiResponse changePortfolioMainImage(
        @PathVariable("pofolNo") Integer pofolNo,
        HttpServletRequest request,
        @RequestParam("mainImage") MultipartFile mainImage) {

        log.debug("check : {} / {} / {}", pofolNo, request.getParameter("autoSelect"), mainImage);
        return ok(null);
    }

Приведенный выше код успешно выполнен.

В чем разница?Я не могу понять, @RequestParam не работает, но работает с HttpServletRequest.

1 Ответ

0 голосов
/ 25 сентября 2018

Второе не работает, потому что для @RequestParam ("autoSelect") не требуется null String autoSelect;

За исключением того, что вы должны указать значение по умолчанию или require = false

Третий всегда работает, потому что он только вводит HttpServletRequest.Но, пожалуйста, будьте осторожны, значение может быть все еще нулевым.

Совсем иначе, как получить значение параметра в multipart / form-data и зависит от вашей версии api сервлета.

Более четкое объяснение multipartи сервлет api версия:

Как загрузить файлы на сервер, используя JSP / Servlet?

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