Использовать часть URL в качестве аргумента для контроллера в Spring MVC - PullRequest
2 голосов
/ 08 октября 2009

Например, с URL

foo.com/bar/99

99 будет доступен непосредственно для метода в контроллере в качестве аргумента. Контроллер сопоставлен с / bar

Для тех, кто знаком с ASP.NET MVC или Django, это будет похоже на маршруты. MapRoute в первом и использование (? P \ d +) в URL-шаблонах во втором.

Можно было бы обработать данные в объекте Http Request напрямую, чтобы получить это, но я хотел бы знать, есть ли в Spring MVC встроенная поддержка для этого (особенно в версии 2.5).

Ответы [ 2 ]

12 голосов
/ 09 октября 2009

Для тех, кто использует Spring 3, я узнал, что это можно сделать с помощью новой аннотации @PathVairable

Вот пример из 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";
}
0 голосов
/ 08 октября 2009

Нет, Spring не поддерживает это из коробки. Однако вы можете отобразить путь к методу name , используя @ RequestMapping и соответствующим образом настроив InternalPathMethodNameResolver:

@Controller
@RequestMapping("/bar/*")
public class MyController {
  ...
  public String do99(HttpServletRequest request) {
    ...
  }
}

Вы должны будете указать prefix для InternalPathMethodNameResolver как "do", чтобы вышеприведенное сработало, поскольку имена методов не могут начинаться с цифры. Если вы будете использовать «foo.com/bar/baz» в качестве URL и вызывать свой метод baz, дополнительная настройка не потребуется.

Если вы не хотите использовать отображение имени метода, получить '99' в качестве параметра так же просто, как получить его из request.getPathInfo() в вашем методе.

...