Подписи метода контроллера Spring очень гибкие и поддерживают количество параметров. Они перечислены в documentation.
Что касается вашего второго вопроса, то фиксированная подпись не существует именно для обеспечения гибкости при написании методов контроллера.
Индивидуальные параметры разрешаются с использованием интерфейсов HandlerMethodArgumentResolver
. Например, если у вас есть параметр, аннотированный параметром @PathVariable
, его значение будет разрешено на PathVariableMethodArgumentResolver
.
Вы можете создать собственную реализацию HandlerMethodArgumentResolver
, чтобы разрешить некоторые настраиваемые типы параметров в сигнатурах вашего контроллера.
Исторически раньше были контроллеры с фиксированными сигнатурами весной. Например, они будут реализовывать интерфейс AbstractCommandController
. Такой контроллер будет осуществлять следующий метод:
ModelAndView handle(HttpServletRequest request, HttpServletResponse response,
Object command, BindException errors)
Однако весна развивалась с тех пор, и этот подход был устаревшим в пользу контроллеров на основе аннотаций в Spring 3.