Utilizzare parte dell'URL come argomento a un controller in Spring MVC
-
20-09-2019 - |
Domanda
Ad esempio, con l'URL
foo.com/bar/99
99 sarà disponibile direttamente a un metodo nel controllore come argomento. Il controllore è mappato / bar
Per chiunque abbia familiarità con ASP.NET MVC o Django, questo sarebbe simile a routes.MapRoute nel primo e l'utilizzo (? P \ d +) nel urlpatterns in quest'ultimo.
Sarebbe possibile elaborare i dati nella richiesta oggetto HTTP direttamente per ottenere questo, ma mi piacerebbe sapere se Spring MVC è dotato di supporto per questo (in particolare la versione 2.5).
Soluzione
No, Primavera non supporta questa out of the box. È possibile, tuttavia, mappa percorso metodo nome con @ RequestMapping e InternalPathMethodNameResolver
opportunamente configurate:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
Dovrete specificare prefix
per InternalPathMethodNameResolver
come "fare" per quanto sopra a lavorare dal momento che i nomi dei metodi non possono iniziare con cifre. Se si sceglie di usare "foo.com/bar/baz" come URL e chiamare il metodo di baz
, sarebbe necessario alcuna configurazione aggiuntiva.
Se non si desidera utilizzare il nome del metodo di mappatura, ottenendo '99' come parametro è facile come afferrandolo dal request.getPathInfo()
nel metodo.
Altri suggerimenti
Per chi utilizza Spring 3, ho imparato questo può essere fatto utilizzando la nuova annotazione @PathVairable
Ecco l'esempio da http: // blog .springsource.com / 2009/03/08 / rest-in-spring-3-MVC /
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}