Обязательный параметр String 'file' отсутствует () при отправке данных в мое приложение Springboot - PullRequest
0 голосов
/ 08 февраля 2019

В моем контроллере у меня есть этот метод, который получает данные

    @RequestMapping(path = "/takemyvid", method = RequestMethod.POST)
    public String upload2(@RequestParam("summary") String summary, @RequestPart("file") MultipartFile file) {
    System.out.println(file);
    System.out.println(summary);
    return "";
}

Однако, когда я тестирую его с почтальоном с правильными параметрами, я получаю ошибку

Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'summary' is not present]

Post Man Error

Это происходит, даже когда я включаю только файл.

Я установил максимальный размер файла в файле свойств.

spring.servlet.multipart.max-file-size=128MB
spring.servlet.multipart.max-request-size=128MB

Использование Spring Boot версии 2.1.2.RELEASE.

Ответы [ 2 ]

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

Обработка требуется VS необязательные параметры запроса

Сообщение Required String parameter 'summary' is not present показывает, что ваш @RequestParam String summary был по умолчанию required = true - см. java-docs .

Если вы хотите, чтобы конечная точка API имела сводку как необязательно , а затем установите @RequestParam(required = false).

Обработка загрузки файлов

Поскольку вы используете форму (пары ключ-значение), я бы предложил аннотировать параметр file с помощью @RequestParam и позволить Spring обработать преобразование в указанный тип параметра MultipartFile.

См. документы для @ RequestPart :

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

См. Также документы Spring-Boot, версия 2.1.2, раздел 78.5 Обработка многоэтапных загрузок файлов

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

Я использовал @ModelAttribute аннотацию в аргументах метода:

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

    @RequestMapping(path = "/takemyvid", method = RequestMethod.POST)
    public void upload2(@ModelAttribute FileUploadDto fileUploadDto) {
        logger.info("File uploaded, summary = {}, fileSize = {} bytes", fileUploadDto.getSummary(), fileUploadDto.getFile().getSize());
    }

}

И я также создал класс Dto следующим образом:

public class FileUploadDto {

    private String summary;
    private MultipartFile file;
    //getters, setters, whatevers [...]
}

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

edit

Я только что заметил, что у вас есть набор заголовков.Если для Content-Type установлено значение Multipart, удалите его, поскольку это может привести к возникновению исключения для границы файла из нескольких частей.Почтальон справится сам.

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