2011-06-23 12 views
5

Używam kontrolera opartego na adnotacjach sprężynowych. Chcę, aby mój adres URL/użytkownik/wiadomości były mapowane do kontrolera a, jeśli znacznik parametru zapytania jest obecny w innym sterowniku b. Jest to wymagane, ponieważ gdy obecny jest znacznik parametru, może istnieć więcej parametrów wraz z tym, który chcę obsłużyć w innym kontrolerze, aby zachować czystość implementacji. Czy jest jakiś sposób, aby to zrobić na wiosnę. Czy jest jeszcze jakieś inne eleganckie rozwiązanie tego problemu?Odwzorowywanie tego samego adresu URL na różne kontrolery wiosną na podstawie parametru zapytania

Odpowiedz

3

Jeśli chcesz, aby przejść trasę wiosną, można sprowadzić HandlerInterceptor wspomniano here. Interceptor może przyjrzeć się twojemu zapytaniu i przekierować link do czegoś, co może zostać przechwycone przez inną SimpleUrlMapper.

Innym sposobem jest wysłanie go do jednego sterownika i niech kontroler do przodu do innego działania, jeśli parametr zapytania jest „b”.

+0

HandlerInterceptor brzmi fajnie, ale na razie myślę, że zastosuję drugie podejście. Jestem trochę zdezorientowany, jak sprawdzić obecność lub nieobecność jakiegoś parametru w kontrolerze na wiosnę. Nawet jeśli wiem, że jakiś parametr zapytania jest obecny czy nie, wtedy muszę umieścić kontroler wewnątrz kontrolera, aby podjąć działanie oparte na tym , więc jeśli (tag == someValue) to zrobię x, ale na wypadek, gdyby nie było parametru o nazwie "tag" jak sobie z tym poradzić? – r15habh

+0

@kcr: Nie jestem pewien, czy zrozumiałem pytanie, ale możesz użyć HttpServletRequest w swoim kontrolerze i wywołać metodę getParameterMap, która powinna dać mapę klucza i wartości dla bieżącego żądania. Następnie możesz wysłać zapytanie do mapy, aby sprawdzić, czy obecny jest parametr. – rajasaur

+0

moje złe myśli w złym kierunku :) – r15habh

5

Można użyć atrybutu params z adnotacją @RequestMapping, aby wybrać metodę kontrolera w zależności od parametrów Http.

Zobacz ten przykład:

@RequestMapping(params = "form", method = RequestMethod.GET) 
public ModelAndView createForm() { 
    ... 
} 

@RequestMapping(method = RequestMethod.GET) 
public ModelAndView list() { 
    ... 
} 

Jest to styl REST jak wiosenny ROO korzysta: czy wniosek zawiera parametr forms następnie handler createForm jest używany, jeśli stosuje się nie metoda list.

+0

brzmi dobrze, będzie go wypróbować później ... na razie Znalazłem alternatywnego podejścia z czymś takim @RequestParam (wartość = „tag”, wymagane = false) a następnie sprawdzanie wartości pustej parametru "tag" – r15habh

Powiązane problemy