Используйте часть URL-адреса в качестве аргумента для контроллера в Spring MVC

StackOverflow https://stackoverflow.com/questions/1534695

Вопрос

Например, с URL-адресом

foo.com/bar/99

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

Для всех, кто использует 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";
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top