2009-10-08 2 views
8

In Spring MVC ho un controller che ascolta tutte le richieste che arrivano a /my/app/path/controller/*.Ottieni la variabile nel percorso di un URI

Diciamo che una richiesta arriva a /my/app/path/controller/blah/blah/blah/1/2/3.

Come ottenere la parte /blah/blah/blah/1/2/3, ovvero la parte corrispondente allo * nella definizione di mappatura del gestore.

In altre parole, sto cercando qualcosa di simile a pathInfo per servlet ma per controller.

risposta

8

In Spring 3 è possibile utilizzare l'annotazione @ PathVariable per afferrare parti dell'URL.

Ecco un rapido esempio da http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/

@RequestMapping(value="/hotels/{hotel}/bookings/{booking}", method=RequestMethod.GET) 
public String getBooking(@PathVariable("hotel") long hotelId, @PathVariable("booking") long bookingId, Model model) { 
    Hotel hotel = hotelService.getHotel(hotelId); 
    Booking booking = hotel.getBooking(bookingId); 
    model.addAttribute("booking", booking); 
    return "booking"; 
} 
1

In Primavera 2.5 è possibile ignorare qualsiasi metodo che accetta un'istanza di HttpServletRequest come argomento.

org.springframework.web.servlet.mvc.AbstractController.handleRequest

a Spring 3 è possibile aggiungere un argomento HttpServletRequest al metodo di controllo e la primavera legherà automaticamente la richiesta ad esso. ad es.

@RequestMapping(method = RequestMethod.GET) 
    public ModelMap doSomething(HttpServletRequest request) { ... } 

In entrambi i casi, questo oggetto è lo stesso oggetto di richiesta si lavora con in una servlet, incluso il metodo getPathInfo.