例如,使用 URL
foo.com/bar/99
99 将作为参数直接提供给控制器中的方法。控制器映射到 /bar
对于熟悉 ASP.NET MVC 或 Django 的任何人来说,这类似于前者中的 routes.MapRoute 和后者中的 urlpatterns 中使用 (?P\d+) 。
可以直接处理 Http Request 对象中的数据来获取它,但我想知道 Spring MVC 是否对此具有内置支持(特别是 2.5 版)。
例如,使用 URL
foo.com/bar/99
99 将作为参数直接提供给控制器中的方法。控制器映射到 /bar
对于熟悉 ASP.NET MVC 或 Django 的任何人来说,这类似于前者中的 routes.MapRoute 和后者中的 urlpatterns 中使用 (?P\d+) 。
可以直接处理 Http Request 对象中的数据来获取它,但我想知道 Spring MVC 是否对此具有内置支持(特别是 2.5 版)。
对于使用 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";
}
不,Spring 不支持开箱即用。但是,您可以 使用@RequestMapping将路径映射到方法名称并进行适当配置:InternalPathMethodNameResolver
@Controller
@RequestMapping("/bar/*")
public class MyController {
...
public String do99(HttpServletRequest request) {
...
}
}
您必须将 for 指定prefix
为InternalPathMethodNameResolver
“do”才能使上述方法起作用,因为方法名称不能以数字开头。如果您使用“foo.com/bar/baz”作为 URL 并调用您的方法baz
,则不需要额外的配置。
如果您不想使用方法名称映射,则将“99”作为参数就像从request.getPathInfo()
您的方法中获取它一样简单。