2015-11-02 4 views
2

Я вижу методы обработчика контроллера Spring MVC с различными параметрами. Такие, как:Как определить параметры метода Spring Controller?

  • XXX()
  • XXX (модель Модель)
  • XXX (HttpServletRequest запрос, модели Модель)
  • XXX (HttpServletRequest запрос, HttpServletResponse ответ)

Так,

  • Что определяет список параметров?
  • Почему нет фиксированной подписи для метода контроллера контроллера Spring?
  • Как пружина управляет такими переменными списками параметров?
  • Могу ли я вставить параметр произвольного типа?

ответ

1

См. Раздел справки по весне: 21.3.3 Defining @RequestMapping handler methods, в нем перечислены все поддерживаемые параметры.

У него нет фиксированной подписи, потому что часто приходится внедрять столько разных контроллеров, что все они нуждаются в различной информации. Конечно, вы можете сделать все возможное извлечения информации из объекта HttpServletRequest самостоятельно, но это не путь Spring: Spring-Way - это больше, чем вы используете абстракцию высокого уровня для реализации бизнес-логики, и пусть весна низкоуровневый технический материал.

Но самый важный момент в использовании подхода гибких аннотационных баз для подхода на основе интерфейса или наследования заключается в том, что вы можете иметь несколько методов обработчика запросов в одном классе контроллера. (В то время как с интерфейсом вам понадобится почти один класс для каждого обработчика.)

1

Подписи метода контроллера Spring очень гибкие и поддерживают количество параметров. Они перечислены в documentation.

Что касается вашего второго вопроса, то фиксированная подпись не существует именно для обеспечения гибкости при написании методов контроллера.

Индивидуальные параметры разрешаются с использованием интерфейсов HandlerMethodArgumentResolver. Например, если у вас есть параметр, аннотированный параметром @PathVariable, его значение будет разрешено на PathVariableMethodArgumentResolver.

Вы можете создать собственную реализацию HandlerMethodArgumentResolver, чтобы разрешить некоторые настраиваемые типы параметров в сигнатурах вашего контроллера.


Исторически раньше были контроллеры с фиксированными сигнатурами весной. Например, они будут реализовывать интерфейс AbstractCommandController. Такой контроллер будет осуществлять следующий метод:

ModelAndView handle(HttpServletRequest request, HttpServletResponse response, 
     Object command, BindException errors) 

Однако весна развивалась с тех пор, и этот подход был устаревшим в пользу контроллеров на основе аннотаций в Spring 3.

0

Вы получите список поддерживаемых типов здесь Supported method argument types, которые являются аргументами методов обработчика.

Используя отражение java, Spring затем разрешит аргументы вашего метода контроллера. Таким образом, в вашем случае Locale и модель будут автоматически переданы вам. Если вы включили другой параметр, например HttpSession, который будет передан вам.

Смежные вопросы