如何使用注释在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。