如何使用注释在SpringMVC中创建默认方法?

我无法找到解决方案,这让我发疯了。 我有@Controller映射,使用@RequestMapping响应多个方法。 当没有指定更具体的内容时,我想将其中一个方法标记为默认方法。 例如:

@Controller @RequestMapping("/user/*") public class UserController { @RequestMapping("login") public String login( MapModel model ) {} @RequestMapping("logout") public String logout( MapModel model ) {} @RequestMapping("authenticate") public String authenticate( MapModel model ) {} } 

所以/ user / login – > login方法,/ user / logout – > logout等。我想这样做,如果有人去/ user,那么它会路由到这些方法之一。 但是,我没有在@RequestMapping上看到任何允许我将这些方法之一指定为默认处理程序的内容。 我也没有看到任何其他注释可能在类上使用这样做。 我开始怀疑它不存在。

我正在使用Spring 2.5.6。 这是在3.0.0中解决的吗? 我可能只是破解Spring使它工作,因为它非常烦人,这不是更直接。

提前致谢。

看看这个答案:

Spring MVC和带注释的控制器问题

如果使用以下方法注释方法,该怎么办?

 @RequestMapping(method = RequestMethod.GET) 

你可以在这里看到一个例子:

Spring 3.0 MVC + Hibernate:简化了注释 – 教程

这里可以看到相同的行为:

Aaron Schram的Spring Framework 3.0 MVC (见第21页)

简短回答:我不知道如何使用简单标记简单地将一个方法指定为默认方法。

但是有这个……

我不知道在哪个版本的Spring中实现了这个版本,但你可以在3.1.2中为@RequestMapping提供多个value 。 所以我这样做:

 @Controller @RequestMapping("/user") public class UserController { @RequestMapping(value = {"", "/", "/list"}, method = RequestMethod.GET) public String listUsers(ModelMap model) { } @RequestMapping(value = "/add", method = RequestMethod.POST) public ModelAndView add(HttpServletRequest request, ModelMap model) { } } 

然后,以下URL映射到listUsers()

我会在那里创建一个没有RequestMapping值的默认方法。 请参阅下面的方法defaultCall() 。 然后,您只需使用URL调用它们:[yourhostname] / user

 @Controller @RequestMapping("/user") public class UserController { @RequestMapping(method = RequestMethod.GET) public String defaultCall( MapModel model ) { //Call the default method directly, or use the 'forward' String. Example: return authenticate( model ); } @RequestMapping("login") public String login( MapModel model ) {} @RequestMapping("logout") public String logout( MapModel model ) {} @RequestMapping("authenticate") public String authenticate( MapModel model ) {} } 

参考: Spring框架请求映射

只需在默认方法上使用@RequestMapping("**") 。 任何更具体的映射仍然应该接受他们的请求。 我有时会使用此方法设置默认方法。 目前使用的是Spring v4.3.8.RELEASE。