Cześć, mam pytanie o rozwiązanie takiego problemu :

Robię sobie prostą stronkę do sprawdzania pogody ( na razie wyszukiwanie po mieście ). Mam jeden kontroler i tak:

  • w mapowaniu na "/" w GET mam wyświetlenie pliku form.html, który zawiera sam formularz zapytania o miasto i przekazuje do modelu w tej metodzie jako argument nowy obiekt szukania : new Search(), tak aby formularz mógł być na niego zmapowany

  • na "/" w metodzie POST mam przekierowanie na "/" + search.getCity()

  • na "/{city}" GET przekazuję do modelu obiekt wyszukanej pogody i mi wszystko ładnie wyświetla w result.html.

Kolejne co chciałem zrobić, to aby na stronie result.html tam gdzie są już konkretne wyniki nie trzeba było się cofać na "/" do szukania w nowym mieście tylko, aby tam też znalazła się szukarka. No to dodałem do result.html ten sam formularz wykorzystując th:fragment i th:include, w GET na "/{city} dodatkowo przekazałem do modelu do nowego ponownie new Search() aby formularz miał na co mapować i zrobiłem w POST "/{city} przekierowanie na "/{city}.

Nie podoba mi się to rozwiązanie, bo mam powtórzony kod i trochę jest masło maślane. Chyba lepiej, aby to wyglądało tak, że ten formularz jest statycznym elementem a pod nim po prostu wyświetlają się wyniki. I wtedy bym miał też 1 plik html i po 1 GET i POST. Wtedy ustawiłbym mapowanie w GET na "/" i "/{city} i w pliku html w zależności od tego czy w URL jest coś po "/" czy nie wyświetlałbym konkretny wynik lub nic.

@Edit ^
Ok sprawdziłem i nie mogę jednocześnie mapować na "/" i "/{city} bo wtedy na adresie "/" wyskakuje błąd, że nie przekazałem nic zmiennej @PathVariable

Albo po prostu z "/" będę przekierowywał na "/nocity" i dokonam sprawdzania, że jeśli city == nocity to też nie wyświetlę wyników.

Jakie rozwiązanie jest w praktyce najlepsze ?
@Shalom wiem, że Ty dobrze ogarniasz springa :)