Utiliser une partie de l'URL comme argument à un contrôleur dans Spring MVC
-
20-09-2019 - |
Question
Par exemple, l'URL
foo.com/bar/99
99 seront disponibles directement à une méthode dans le contrôleur comme un argument. Le dispositif de commande est mis en correspondance / bar
Pour ceux qui sont familiers avec ASP.NET MVC ou Django, ce serait semblable à routes.MapRoute dans l'ancienne et en utilisant (? P \ d +) en urlpatterns dans celle-ci.
Il serait possible de traiter les données dans le Http objet Request directement pour obtenir cela, mais je voudrais savoir si Spring MVC a un support intégré pour cette (en particulier la version 2.5).
La solution
Non, Spring ne supporte pas hors de la boîte. Vous pouvez, cependant, le chemin de la carte à la méthode nom en utilisant @ RequestMapping et InternalPathMethodNameResolver
configuré de manière appropriée:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
Vous devez spécifier prefix
pour InternalPathMethodNameResolver
comme « faire » pour ce qui précède pour travailler puisque les noms de méthode ne peut pas commencer par le chiffre. Si vous deviez utiliser « foo.com/bar/baz » comme URL et appelez votre méthode baz
, aucune configuration supplémentaire serait nécessaire.
Si vous ne voulez pas utiliser le mappage de nom de la méthode, obtenir « 99 » en tant que paramètre est aussi facile que le saisissant de request.getPathInfo()
dans votre méthode.
Autres conseils
Pour toute personne qui utilise Spring 3, j'ai appris cela peut être fait en utilisant la nouvelle annotation @PathVairable
Voici l'exemple de http: // Blog .springsource.com / 2009/03/08 / repos en ressort 3-mvc /
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}