2

例如,使用 URL

foo.com/bar/99

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

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

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

4

2 回答 2

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";
}
于 2009-10-09T17:25:24.263 回答
0

不,Spring 不支持开箱即用。但是,您可以 使用@RequestMapping将路径映射到方法名称并进行适当配置:InternalPathMethodNameResolver

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

您必须将 for 指定prefixInternalPathMethodNameResolver“do”才能使上述方法起作用,因为方法名称不能以数字开头。如果您使用“foo.com/bar/baz”作为 URL 并调用您的方法baz,则不需要额外的配置。

如果您不想使用方法名称映射,则将“99”作为参数就像从request.getPathInfo()您的方法中获取它一样简单。

于 2009-10-07T23:33:55.250 回答