2012-05-03 2 views
14

Я новичок в весеннем рамках .... при поиске на google..I нашел несколько примеров, который @RequestMapping annoted на уровне класса и несколько примеров, показывающих его на уровне menthodможет кто-нибудь объяснить мне разницу между контроллером уровня класса и контроллером уровня метода ..?

Когда использовать уровень RequestMapping класса и menthod level RequestMapping аннотации ... может ли кто-нибудь объяснить мне разницу между уровнем класса RequestMapping и уровнем метода RequestMapping .. ??

поэтому я немного запутался об их применении на:

а) уровня Класс

уровня б) Метод

Также я нашел несколько @Requestmapping с типом: GET/Post , тогда как некоторые примеры не имеют параметра типа.

Какой подход лучше .. ??

Новейшие версии (> Spring 2.5) не нуждаются в типе параметров для сопоставления запросов ???

ответ

16

Контроллер должен быть помечен как @Controller на уровне класса. Аннотацию @RequestMapping можно применять как на уровне класса, так и на уровне метода. Если это так, аннотации методов будут интерпретироваться как относительные URL-адреса (относительно URL-адреса на уровне класса). Однако должны присутствовать аннотации уровня метода, иначе метод не будет отображаться.

В аннотациях параметры могут быть отмечены как необязательные значения по умолчанию. Параметр метода такой: по умолчанию он равен GET, но может быть явно установлен на POST или что-то еще.

См:

+0

Patrick Floyed: Спасибо за такую ​​ценную информацию! – JOHND

+0

Если бы вы могли объяснить мне: «Если это так, аннотации метода будут интерпретироваться как относительные URL-адреса (относительно URL-адреса на уровне классов). Однако должны присутствовать аннотации уровня метода, иначе метод не будет отображаться». , я буду благодарен вам! – JOHND

+11

Если метод сопоставлен с foo/bar, чем адрес foo/bar. Но если класс сопоставляется с baz и метод сопоставляется с foo/bar, то адрес метода baz/foo/bar –

-1

Чтобы ответить на ваш последний вопрос т.е. какой из них лучше, я бы сказал, в производстве мы используем сочетание этих двух. Например, если есть пользовательский контроллер, мы сопоставляем класс с «/ user», а методы, указанные для getSettings(), будут отображаться на «/ settings», а метод для getPermissions() будет отображаться на «/ разрешения» и т. Д.

Вы можете сопоставьте эти методы непосредственно с «/ user/settings» и «/ user/permissions», а также пропустив сопоставление классов. Но в основном мы предпочитаем первый подход.

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