2013-06-26 7 views
0

Я использую контроллеры Spring MVC для служб REST. Я хочу переопределить поведение GET и POST DispatcherServlet. Я хочу выполнить некоторую пользовательскую логику, когда какое-либо условие выполняется во время запроса GET и POST, в противном случае - в случае реализации DispatcherServlet.Как переопределить поведение get и post DispatcherServlet?

Я внедрил пользовательский serlvet, полученный из Spring DispatcherServlet. Существуют методы doGet() и doPost() на интерфейсе HttpServlet, но кажется, что эти методы были объявлены окончательными либо в DispatcherServlet, либо в одном из базового класса. Поэтому я не мог переопределить doGet() и doPost().

Из документации я выяснил два метода - doService() и doDispatch(), которые могут быть переопределены. Я смущен различием между этими двумя методами.

  1. Какой метод - doService() или doDispatch() следует переопределить?
  2. В чем разница между doService() и doDispatch()?
  3. Как выяснить, что такое http request - GET или POST?

Спасибо.

+0

Какое поведение вы хотите переопределить? Не можете ли вы сделать это с помощью фильтров или перехватчиков? – axtavt

+0

Я хочу проверить полезную нагрузку и заголовки запроса, а затем предпринять соответствующие действия. Могут быть много подходов для достижения того же. Если этот подход неверен, я могу изучить другие подходы. Есть ли что-то неправильное в переопределении поведения GET и POST DispatcherServlet? Это своего рода небольшое ПОС, а не производство. –

+0

_inspect запрос полезной нагрузки и заголовки_ Разве это не то, для чего '@ RequestMapping'? Можете ли вы привести пример другого действия в зависимости от полезной нагрузки запроса, которая потребует более одного метода контроллера? –

ответ

0

Правильный способ сделать это - создать Filter.

Обратите внимание, однако, что проверка полезной нагрузки запроса не является простой вещью сама по себе, потому что, прочитав полезную нагрузку, вы не можете «непрочитаться» без каких-либо дополнительных усилий. См., Например, How can I log RESTful post data?

Но переопределение методов DispatcherServlet вместо использования фильтров в любом случае не упростит, это просто делает вещи менее ясными и нарушает SRP.

+0

Спасибо, что предложили подход фильтра. Однако на данный момент я хочу придерживаться пользовательского подхода DispatcherServlet. Мне может потребоваться проверить разные условия и выполнить различные действия для каждого глагола http. –