文章目录
前言
springmvc中有很多注解,但是其中也有很多相似的注解。比如说@Controller和@RestController的区别,@RequestMapping 和 @GetMapping @PostMapping 区别,@RequestParam和@PathVariable注解的区别。今天我们就主要来区分一下这几组之间的区别,对于它们有一个透彻的认知。
叙述
@Controller VS @RestController
解释说明
-
@Controller标识一个Spring类是Spring MVC controller处理器。控制器可以支持同时处理多个请求动作。
-
@RestController是@Controller和@ResponseBody的结合体,两个标注合并起来的作用。
相同点
Controller和RestController都是用来表示spring某个类的是否可以接收HTTP请求
不同点
- @RestController注解,相当于@Controller+@ResponseBody两个注解的结合,返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
- @Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。若返回json等内容到页面,则需要加@ResponseBody注解
- 使用@Controller 注解返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行
实例说明
假定一个user对象,对象有很多属性(name,sex,age,birth,address,tel)
在@controller注解中,返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,与html页面配合使用的,
在这种情况下,前后端的配合要求比较高,java后端的代码要结合html的情况进行渲染,使用model对象(或者modelandview)的数据将填充user视图中的相关属性,然后展示到浏览器,这个过程也可以称为渲染;
java示例代码如下:
@Controller
@RequestMapping(method = RequestMethod.GET, value = "/")
public String getuser(Model model) throws IOException {
model.addAttribute("name",bob);
model.addAttribute("sex",boy);
return "user";//user是模板名
}
对应视图user.jsp中的html代码:
html xmlns:th="http://www.thymeleaf.org">
<body>
<div>
<p>"${name}"</p>
<p>"${sex}"</p>
</div>
</body>
</html>
而在@restcontroller中,返回的应该是一个对象,即return一个user对象,这时,在没有页面的情况下,也能看到返回的是一个user对象对应的json字符串,而前端的作用是利用返回的json进行解析渲染页面,java后端的代码比较自由。
java端代码:
@RestController
@RequestMapping(method = RequestMethod.GET, value = "/")
public User getuser( ) throws IOException {
User bob=new User();
bob.setName("bob");
bob.setSex("boy");
return bob;
}
访问网址得到的是json字符串{“name”:”bob”,”sex”:”boy”},前端页面只需要处理这个字符串即可。
@RequestMapping VS @GetMapping @PostMapping
解释说明
Spring4.3中引进了{@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping} 来帮助简化常用的HTTP方法的映射 并更好地表达被注解方法的语义
相同点
@GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写。
@PostMapping是一个组合注解,是@RequestMapping(method = RequestMethod.POST)的缩写。
不同点
@RequestMapping注解该注解用来映射一个请求。指示Spring用哪一个类或非法来处理请求动作。不属于参数绑定注解。
在类上定义:提供初步的请求映射信息。相对于 WEB 应用的根目录
在方法上定义:提供进一步的细分映射信息。相对于类定义处的 URL
@RequestParam VS @PathVariable
相同点
@RequestParam 和 @PathVariable 注解是用于从request中接收请求的,两个都可以接收参数,只不过输入的部分不同,一个在URL路径部分,另一个在参数部分。
不同点
用@RequestParam请求接口时,URL是:http://www.test.com/user/getUserById?userId=1
用@PathVariable请求接口时,URL是:http://www.test.com/user/getUserById/2
小结
对比方式学习,不断的了解中。
感谢您的阅读~~