Utilizar parte de la URL como argumento a un controlador en la primavera de MVC
-
20-09-2019 - |
Pregunta
Por ejemplo, con el URL
foo.com/bar/99
99 estará disponible directamente a un método en el controlador como un argumento. El controlador está asignada a / bar
Para cualquier persona familiarizada con ASP.NET MVC o Django, esto sería similar a routes.MapRoute en el primero y el uso de (? P \ d +) en urlpatterns en el segundo.
Sería posible procesar los datos de la solicitud objeto Http directamente a conseguir esto, pero me gustaría saber si Spring MVC ha incorporado en el apoyo a esta (en particular la versión 2.5).
Solución
No, la primavera no admite esta fuera de la caja. Puede, sin embargo, mapa de ruta con el método nombre usando @ RequestMapping y InternalPathMethodNameResolver
apropiadamente configurado:
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
Vas a tener que especificar prefix
para InternalPathMethodNameResolver
como "hacer" de los anteriores para trabajar desde nombres de los métodos no pueden comenzar con el dígito. Si se va a utilizar "foo.com/bar/baz" como URL y llame a su método de baz
, sería necesaria ninguna configuración adicional.
Si no desea utilizar la asignación de nombre de método, conseguir '99' como parámetro es tan fácil como coger desde request.getPathInfo()
en su método.
Otros consejos
Para cualquier persona utilizando Spring 3, he aprendido esto se puede hacer uso de la nueva anotación @PathVairable
Aquí está el ejemplo de http: // Blog .springsource.com / 2009/03/08 / reposo dentro de muelle-3-mvc /
@RequestMapping("/hotels/{hotelId}")
public String getHotel(@PathVariable String hotelId, Model model) {
List<Hotel> hotels = hotelService.getHotels();
model.addAttribute("hotels", hotels);
return "hotels";
}