任何人都可以解释一下类级控制器和方法级控制器之间的区别..?

我是春天框架的新手....在谷歌上搜索时..我发现很少有例子在课堂上@RequestMapping注释,很少有例子在门面上显示它。

何时使用类级请求映射和 menthod 级请求映射注释...任何人都可以解释一下类级请求映射和方法级请求映射之间的区别..??

所以我对它们的应用有点困惑:

a) 班级级别

b) 方法级别

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

哪种方法更好..??

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


答案 1

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

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

看:


答案 2

特别是在Spring MVC中,最重要的区别之一是绝对路径和相对路径。

如您所知:
在Spring MVC中,您可以将视图作为或对象返回。StringModelAndView

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

  1. 如果在视图名称的开头声明,则使用的是绝对路径
    也就是说,它无关紧要类级别,并直接将自己作为最终视图名称引入。/@RequestMapping
  2. 如果未在视图名称的开头声明,则使用相对路径(相对于类路径),因此它将追加类级别以构造最终的视图名称/@RequestMapping

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

示例:
1。创建两个HTML文件并在spring(boot)结构的文件夹中:
请注意,在相对路径的情况下,类级别表现为文件夹路径。test1.htmltest2.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. 创建一个控制器类,如下所示。此示例显示了具有返回值以及相对路径和绝对路径的不同情况。StringModelAndView

@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(例如或在 Spring Boot 的文件中)指定视图文件的后缀,并且不要在上面的代码中声明后缀。ViewResolverInternalResourceViewResolverspring.mvc.view.suffix=.htmlappliction.properties.html

最好的问候


推荐