使用URL的一部分作为Spring MVC中控制器的参数

时间:2009-10-07 23:02:49

标签: java spring spring-mvc url-parameters

例如,使用网址

foo.com/bar/99

99将直接作为参数提供给控制器中的方法。控制器映射到/ bar

对于熟悉ASP.NET MVC或Django的人来说,这类似于前者中的routes.MapRoute,后者中的urlpatterns中使用(?P \ d +)。

可以直接处理Http Request对象中的数据来获取它,但我想知道Spring MVC是否内置了对此的支持(特别是2.5版)。

2 个答案:

答案 0 :(得分:12)

对于任何使用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";
}

答案 1 :(得分:0)

不,Spring不支持开箱即用。但是,您可以使用@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()抓取它一样简单。