我是Spring框架的新手....在google上搜索时...我发现很少有在课堂级别注释了@RequestMapping的例子,很少有例子在menthod级别显示
何时使用类级别RequestMapping和menthod级别RequestMapping注释...任何人都可以解释我在类级别RequestMapping和方法级别RequestMapping之间的区别.. ??
所以我对他们的应用有点困惑:
a)班级
b)方法级别
我还发现了一些@Requestmapping
类型:GET / Post,而某些示例没有类型参数。
哪种方法更好.. ??
较新的版本(> Spring 2.5)是否需要参数类型来进行请求映射???
答案 0 :(得分:16)
控制器必须在班级别标记为@Controller
。 @RequestMapping
注释可以在类和方法级别应用。如果是,则方法注释将被解释为相对URL(相对于类级URL)。但是,必须存在方法级别注释,否则将不会映射该方法。
在注释中,可以使用默认值将参数标记为可选。方法参数是这样的情况:它默认为GET
,但可以显式设置为POST
或其他。
请参阅:
答案 1 :(得分:1)
Spring MVC 中最重要的区别之一是绝对和 RELATIVE 路径。
如您所知:
在Spring MVC中,您可以将视图作为String
或ModelAndView
对象返回。
重要说明:
在这两种情况下,您都必须注意相对/绝对路径:
/
,则说明您使用的是绝对路径。@RequestMapping
无关紧要,直接将其自身作为最终视图名称。/
,则说明您使用的是相对路径(相对于类路径),因此附加到类级别 @RequestMapping
以构造最终视图名称。因此,在使用Spring MVC时,您必须考虑上述注意事项。
示例:
1.在spring(boot)结构的test1.html
文件夹中创建两个HTML文件test2.html
和static
:
请注意,在相对路径的情况下,类级别 @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)]
String
和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;
}
}
注意:
您可以在ViewResolver
中指定视图文件的后缀(例如,Spring Boot InternalResourceViewResolver
文件中的spring.mvc.view.suffix=.html
或appliction.properties
,而不必声明.html
以上代码的后缀。
最好的问候
答案 2 :(得分:-1)
要回答你的最后一个问题,即哪一个更好,我会说在生产中我们使用这两者的组合。例如,如果有用户控制器,我们将类映射到" / user"并且getSettings()
的方法说明将映射到" / settings",getPermissions()
的方法将映射到" / permissions"等。
您可以将这些方法直接映射到" / user / settings"和" / user / permissions"以及跳过类映射。但大多数情况下我们更喜欢第一种方法。