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
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”.
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
.
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
- 1. Przekierowanie na podstawie adresu URL - JavaScript
- 2. Różne trasy tego samego komponentu
- 3. Jak przekierować adresy URL na podstawie ciągu zapytania?
- 4. Przepisywanie adresu URL do ciągu zapytania na Apache i Nginx
- 5. iOS - Różne obrazy na podstawie urządzenia LUB skalowania tego samego obrazu?
- 6. Marklogic kwerendy na podstawie wartości wielu atrybutów tego samego pierwiastka
- 7. Ustawianie różnych środowisk (programowanie, produkcja) na podstawie adresu URL
- 8. Python furl library - Czy istnieje sposób na dodanie parametru do adresu URL bez kodowania adresu URL?
- 9. Retrofit 2 - parametr zapytania adresu URL
- 10. jQuery dodaj klasę na podstawie adresu URL strony
- 11. Jak uniknąć wielokrotnego wykonywania tego samego zapytania?
- 12. Używanie tego samego kontrolera na różnych elementach do odnoszenia się do tego samego obiektu
- 13. Jak filtrować URL na podstawie domeny internetowej?
- 14. Konwersja adresu URL blobu na zwykły URL
- 15. Spring MVC: Mapowanie wielu adresów URL do tego samego kontrolera
- 16. Jak ustawić parametry zapytania na url Angular2?
- 17. Bcrypt generuje różne skróty dla tego samego wejścia?
- 18. Metody refaktoryzacji, które używają tego samego kodu, ale różne typy
- 19. Wykonanie funkcji opartej na liczbie całkowitej na podstawie parametru wykonawczego
- 20. pobierz queryString adresu URL na FreeMarker
- 21. Powróć różne widoki tego samego kontrolera w ASP.NET MVC
- 22. C# i VB.Net dać różne wyniki dla tego samego równania
- 23. Mapa cieplna na mapach Google na podstawie intensywności parametru
- 24. zasady gry, jak zrobić oddzielne trasy dla tego samego adresu URL?
- 25. Jak usunąć index.html z adresu URL na stronie internetowej na podstawie angularjs
- 26. utworzyć dwie metody dla tego samego adresu URL z różnymi argumentami
- 27. Homestead 2.0 wiele stron, wszystkie linki do tego samego adresu URL
- 28. Otrzymuj kolejne i poprzednie rekordy w ramach tego samego zapytania.
- 29. Czy mogę ponownie wykorzystać certyfikat SSL na komputerze lokalnym przy użyciu tego samego (skonfigurowanego lokalnie) adresu URL?
- 30. javascript: różne konstruktory dla tego samego typu obiektu
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
@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
moje złe myśli w złym kierunku :) – r15habh