#java #spring-boot #controller
#java #пружинный ботинок #контроллер
Вопрос:
Здравствуйте, я ищу, могу ли я обрабатывать только с помощью одного метода RestController несколько параметров… с помощью метода controllers это можно было бы сделать… но я не смог найти проект с 2 подобными.
@PostMapping(value ="upload")
public upload(@RequestParam MultipartFile file,@RequestParam List<String> myParams ){
some code here ....
return;
}
Мне просто интересно , является ли это тоже хорошей практикой … наличие двух объектов разного типа в одном контроллере и, если это возможно,,, есть идеи????
Ответ №1:
Простой ответ: да, это возможно.
Но, как вы просили о хорошей практике, вот некоторый контекст:
Очень полезно понять, как HTTP на самом деле передает данные.
Если в вашем запросе используется метод GET в качестве запроса, параметры добавляются к URL-адресу в виде строки запроса. Это может выглядеть так: http://example.com/index?param1=value1amp;param2=value2
В этом случае Spring сопоставляет пары ключ-значение из строки запроса с аргументами вашего метода. Но это будет работать только для текста.
Если вы используете POST, данные отправляются внутри тела запроса. То, как это кодируется, зависит от типа носителя ваших данных. Например, тип носителя по умолчанию application/x-www-form-urlencoded
будет кодировать данные в ту же строку запроса, что и выше.
Если вы хотите загрузить данные формы смешанного типа, такие как файл / большой двоичный объект, вместе с некоторыми текстовыми параметрами, ваши данные должны быть закодированы multipart/form-data
.
Пока тело запроса содержит формат ключ-значение, Spring Boot по-прежнему сможет различать и сопоставлять параметры с помощью @RequestParam
(если ключи не отличаются от имен ваших атрибутов, вам даже не нужно присваивать имя value
атрибуту).).
Я настоятельно рекомендую вам взглянуть на @RequestBody
@RequestPart
аннотации и, поскольку я думаю, что часто лучше всего использовать класс модели (DTO) для всего тела запроса (или, скорее, формы, семантически), особенно если требуется обработать много параметров.
Ответ №2:
Вам нужно будет указать имена переменных.
@PostMapping(value ="upload")
public upload(
@RequestParam(value = "file") MultipartFile file,
@RequestParam(value = "myParams") List<String> myParams
){
some code here ....
return;
}