2012-05-03 6 views
14

Jestem nowy w ramach wiosennej .... podczas poszukiwania na google..I znaleźć kilka przykładów, które @RequestMapping annoted na poziomie klasy i kilka przykładów pokazujących go na poziomie menthodmoże ktoś wyjaśnić mi różnicę między kontrolerem poziomu klasy i kontrolerem poziomu metody ..?

Kiedy używać poziomie klasy RequestMapping i menthod poziom Adnotacja RequestMapping ... czy ktoś może mi wyjaśnić różnicę między mapowaniem na poziomie klasy a poziomem poziomu RequestMapping?

więc jestem trochę zdezorientowany o ich zastosowaniu w:

a) na poziomie klasy

poziomu b) Metoda

Również znalazłem niektóre @Requestmapping z rodzaju: get/post , podczas gdy niektóre przykłady nie mają parametru typu.

Które podejście jest lepsze .. ??

Czy nowsze wersje (> Spring 2.5) nie potrzebują typu parametru do mapowania żądań ???

Odpowiedz

16

Kontroler musi być oznaczony jako @Controller na poziomie klasy. Adnotację @RequestMapping można zastosować zarówno na poziomie klasy, jak i metody. Jeśli tak, adnotacje metod będą interpretowane jako względne adresy URL (w stosunku do adresu URL na poziomie klasy). Jednak muszą być obecne adnotacje na poziomie metody, w przeciwnym razie metoda nie zostanie odwzorowana.

W adnotacjach parametry można oznaczyć jako opcjonalne z wartościami domyślnymi. Parametr metody jest taki przypadek: domyślnie jest to GET, ale można jawnie ustawić na POST lub coś innego.

Patrz:

+0

Patrick Floyed: Dzięki za tak cenne informacje! – JOHND

+0

Jeśli mógłbyś mi wyjaśnić: "Jeśli tak, adnotacje metod będą interpretowane jako względne adresy URL (w stosunku do adresu URL na poziomie klasy), jednak adnotacje na poziomie metody muszą być obecne, w przeciwnym razie metoda nie zostanie zmapowana." Będę ci wdzięczny! – JOHND

+11

Jeśli metoda jest odwzorowana na wartość foo/bar, to foo/bar jest adresem. Ale jeśli klasa jest mapowana na baz, a metoda jest odwzorowana na foo/bar, to adres metody to baz/foo/bar –

-1

Aby odpowiedzieć na to ostatnie pytanie to znaczy co jest lepsze, powiedziałbym w produkcji używamy kombinacji tych dwóch. Na przykład, jeśli istnieje kontroler użytkownika, mapujemy klasę na "/ user", a metody mówią, że dla getSettings() zostaną zamapowane na "/ settings", a metoda dla getPermissions() będzie mapowana na "/ permissions" itd.

Możesz zamapuj te metody bezpośrednio na "/ user/settings" i "/ user/permissions", a także pomiń mapowanie klas. Ale najczęściej wolimy pierwsze podejście.