Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有人能解释一下类级控制器和方法级控制器之间的区别吗。。?_Java_Spring_Spring Mvc_Annotations_Spring Annotations - Fatal编程技术网

Java 有人能解释一下类级控制器和方法级控制器之间的区别吗。。?

Java 有人能解释一下类级控制器和方法级控制器之间的区别吗。。?,java,spring,spring-mvc,annotations,spring-annotations,Java,Spring,Spring Mvc,Annotations,Spring Annotations,我是spring框架的新手……在google上搜索时……我发现很少有示例在类级别上注释了@RequestMapping,也很少有示例在menthod级别上显示它 何时使用类级别的RequestMapping和方法级别的RequestMapping注释…有人能解释一下类级别的RequestMapping和方法级别的RequestMapping之间的区别吗 因此,我对他们在以下方面的应用感到有点困惑: a)班级级别 b)方法级别 我还发现了一些类型为GET/Post的@Requestmapping,

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

何时使用类级别的RequestMapping和方法级别的RequestMapping注释…有人能解释一下类级别的RequestMapping和方法级别的RequestMapping之间的区别吗

因此,我对他们在以下方面的应用感到有点困惑:

a)班级级别

b)方法级别

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

哪种方法更好…?


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

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

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

见:


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


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

特别是在春季MVC中最重要的区别之一是绝对路径和相对路径

如您所知:
在SpringMVC中,您可以将视图作为
字符串
模型和视图
对象返回

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

  • 如果在视图名称的开头声明
    /
    ,则使用的是绝对路径
    也就是说,它与类级别
    @RequestMapping
    无关,直接将自己作为最终视图名引入
  • 如果没有在视图名称的开头声明
    /
    ,则使用的是相对路径(相对于类路径),因此它附加到类级别
    @RequestMapping
    以构造最终视图名称
  • >,在使用Spring MVC时,必须考虑上面的注释。 示例:
    1.在spring(boot)结构的

    static
    文件夹中创建两个HTML文件
    test1.HTML
    test2.HTML
    : 请注意,类级别
    @RequestMapping
    相对路径的情况下充当文件夹路径。

  • 创建一个控制器类,如下所示。此示例显示了在相对路径绝对路径下返回
    字符串
    模型和视图
    的不同情况
  • 注意:
    您可以通过
    viewsolver
    指定视图文件的后缀(例如
    internalresourceviewsolver
    spring.mvc.view.suffix=.html
    在spring Boot的
    appliction.properties
    文件中,并且不要在上述代码中声明
    .html
    后缀


    如果您能向我解释“如果是,方法注释将被解释为相对URL(相对于类级别的URL)。但是,必须存在方法级别的注释,否则方法将不会被映射。”,我将非常感谢您!如果方法映射到foo/bar,那么foo/bar就是地址。但是如果类映射到baz,并且方法映射到foo/bar,那么方法的地址就是baz/foo/bar
    --- 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)]
    
    
    
    @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;  
        }
    
    
    }