例如,使用网址
foo.com/bar/99
99将直接作为参数提供给控制器中的方法。控制器映射到/ bar
对于熟悉ASP.NET MVC或Django的人来说,这类似于前者中的routes.MapRoute,后者中的urlpatterns中使用(?P \ d +)。
可以直接处理Http Request对象中的数据来获取它,但我想知道Spring MVC是否内置了对此的支持(特别是2.5版)。
答案 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()
抓取它一样简单。