Java 有人能解释一下类级控制器和方法级控制器之间的区别吗。。?
我是spring框架的新手……在google上搜索时……我发现很少有示例在类级别上注释了@RequestMapping,也很少有示例在menthod级别上显示它 何时使用类级别的RequestMapping和方法级别的RequestMapping注释…有人能解释一下类级别的RequestMapping和方法级别的RequestMapping之间的区别吗 因此,我对他们在以下方面的应用感到有点困惑: a)班级级别 b)方法级别 我还发现了一些类型为GET/Post的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,
@Requestmapping
,而有些示例没有类型参数
哪种方法更好…?
较新版本(>Spring 2.5)是否不需要参数类型来进行请求映射???控制器必须在类级别标记为
@controller
。@RequestMapping
注释可以应用于类和方法级别。如果是,方法注释将被解释为相对URL(相对于类级别的URL)。但是,必须存在方法级注释,否则将无法映射该方法
在注释中,可以使用默认值将参数标记为可选。方法参数是这样的:它默认为GET
,但可以显式设置为POST
或其他
见:
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;
}
}