18

我是 Spring 框架的新手..在 google 上搜索时..我发现很少有在类级别注释了 @RequestMapping 的示例,并且很少有示例在 menthod 级别显示它

何时使用类级别 RequestMapping 和 menthod 级别 RequestMapping 注释...谁能解释一下类级别 RequestMapping 和方法级别 RequestMapping 之间的区别..??

所以我对他们的申请有点困惑:

a) 班级级别

b) 方法级别

我还发现了一些@Requestmapping类型:GET/Post,而一些示例没有类型参数。

哪种方法更好..??

较新的版本(> Spring 2.5)是否不需要请求映射的参数类型???

4

3 回答 3

18

控制器必须标记为@Controller类级别。@RequestMapping注释可以在类和方法级别应用。如果是,方法注释将被解释为相对 URL(相对于类级 URL)。但是,方法级别的注释必须存在,否则方法将不会被映射。

在注释中,参数可以用默认值标记为可选。方法参数就是这样一种情况:它默认为GET,但可以显式设置为POST或其他。

看:

于 2012-05-03T06:40:23.530 回答
1

特别是在Spring MVC中最重要的区别之一是ABSOLUTERELATIVE路径。

如您所知:
在 Spring MVC 中,您可以将视图作为String对象ModelAndView

重要提示:
在这两种情况下,您都必须注意相对/绝对路径

  1. 如果您/在视图名称的开头声明,则使用的是绝对路径
    即不管类级别 @RequestMapping,直接将自己作为最终视图名称进行介绍。
  2. 如果您没有/在视图名称的开头声明,则您使用的是相对路径(相对于类路径),因此它附加类级别 @RequestMapping以构造最终视图名称

因此,在使用 Spring MVC 时,您必须考虑上述注意事项。

示例: 1.在spring(boot)结构的文件夹中
创建两个HTML文件: 请注意,在test1.html相对路径的情况下,类级别表现为文件夹路径。test2.htmlstatic
@RequestMapping

--- resources
    --- static
        --- classLevelPath     //behaves as a folder when we use relative path scenario in view names   
            --- test2.html      //this will be used for relative path [case (2)]
        --- test1.html          //this will be used for absolute path [case (1)]

  1. 创建一个控制器类,如下所示。此示例显示了 returnString以及相对路径和绝对路径ModelAndView的不同情况。

@Controller
@RequestMapping("/classLevelPath")
public class TestController {

    //case(1)
    @RequestMapping("/methodLevelAbsolutePath1")
    public String absolutePath1(Model model){
        //model.addAttribute();
        //...
        return "/test1.html";  
    }

    //case(1)
    @RequestMapping("/methodLevelAbsolutePath2")
    public ModelAndView absolutePath2(Model model){
        ModelAndView modelAndView = new ModelAndView("/test1.html");
        //modelAndView.addObject()
        //....
        return modelAndView; 
    }

    //case(2)
    @RequestMapping("/methodLevelRelativePath1")
    public String relativePath1(Model model){
        //model.addAttribute();
        //...
        return "test2.html";
    }

    //case(2)
    @RequestMapping("/methodLevelRelativePath2")
    public ModelAndView relativePath2(Model model){
        ModelAndView modelAndView = new ModelAndView("test2.html");
        //modelAndView.addObject()
        //....
        return modelAndView;  
    }


}

注意:
你可以通过a来指定你的视图文件的后缀ViewResolver(例如InternalResourceViewResolver或者spring.mvc.view.suffix=.htmlappliction.propertiesSpring Boot的文件中)并且不要.html在上面的代码中声明后缀。

最良好的问候

于 2020-03-19T19:47:46.373 回答
-1

为了回答您的最后一个问题,即哪个更好,我想说在生产中我们使用这两者的组合。例如,如果有一个用户控制器,我们将类映射到“/user”,而 for 的方法getSettings()将映射到“/settings”,而 for 的方法getPermissions()将映射到“/permissions”等。

您可以将这些方法直接映射到“/user/settings”和“/user/permissions”,也可以跳过类映射。但大多数情况下,我们更喜欢第一种方法。

于 2017-10-18T09:48:10.330 回答