代码之家  ›  专栏  ›  技术社区  ›  chubbsondubs

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

  •  9
  • chubbsondubs  · 技术社区  · 16 年前

    我找不到解决办法,这让我发疯了。我已经映射了@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 ) {}
    }
    

    so/user/login->登录方法,/user/logout->注销等。我希望这样做,如果有人转到/user,它将路由到这些方法之一。但是,我在@requestmapping上没有看到任何允许我将这些方法之一指定为默认处理程序的内容。我也没有看到任何其他可能在类上用来做这个的注释。我开始怀疑它不存在。

    我用的是弹簧2.5.6。这在3.0.0中解决了吗?我可能只是为了让Spring工作,因为它非常烦人,这并不简单。

    提前谢谢。

    4 回复  |  直到 9 年前
        1
  •  13
  •   Community Mohan Dere    9 年前

    看看这个答案:

    Spring MVC and annotated controllers issue

    如果用以下内容注释方法会怎么样:

    @RequestMapping(method = RequestMethod.GET)
    

    您可以在这里看到一个示例:

    Spring 3.0 MVC + Hibernate : Simplified with Annotations – Tutorial

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

    Spring Framework 3.0 MVC by Aaron Schram (看第21页)

        2
  •  5
  •   vegemite4me    13 年前

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

    但这是…

    我不知道这是在哪个版本的Spring中实现的,但是您可以提供多个 value S to @RequestMapping 3.1.2所以我这样做:

    @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() :

        3
  •  0
  •   Panini Luncher    11 年前

    我将创建一个没有requestmapping值的默认方法。请看方法 Debug() 下面。然后您可以使用url:[您的名字]/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 Framework Request Mapping

        4
  •  0
  •   cmorris    9 年前

    简单使用 @RequestMapping("**") 在你的默认方法上应该有效。任何更具体的映射都应该继续接受它们的请求。我有时会使用这个方法来设置默认方法。目前使用的是Springv4.3.8.release。