1. 运用于控制层(controller)的一些注释
首先给出整体的列表(有些我会说,有些我不会)
应用场景 | 注解 | 注解说明 |
---|---|---|
处理请求 | @Controller | 处理 Http 请求 |
处理请求 | @RestController | @Controller 的衍生注解 |
路由请求 | @RequestMapping | 路由请求 可以设置各种操作方法 |
路由请求 | @GetMapping | GET 方法的路由 |
路由请求 | @PostMapping | POST 方法的路由 |
路由请求 | @PutMapping | PUT 方法的路由 |
路由请求 | @DeleteMapping | DELETE 方法的路由 |
请求参数 | @PathVariable | 处理请求 url 路径中的参数 /user/{id} |
请求参数 | @RequestParam | 处理问号后面的参数 |
请求参数 | @RequestBody | 请求参数以json格式提交 |
返回参数 | @ResponseBody | 返回 json 格式 |
来源:https://www.cnblogs.com/fishpro/p/spring-boot-study-restcontroller.html
2. @Controller 与 @RestController
首先讲一个所有人都知道的结论:@RestController = @Controller + @ResponseBody。
在注释的代码中@RestController是被@Controller 和 @ResponseBody 同时注释的。因此不能简单的理解@RestController 是 @Controller 或者 @ResponseBody的子类。而是同时拥有而这两个功能的结合型的注释。
下面我们就先分开讲然后合起来讲。
2.1 @Controller
spring mvc 开发中最常用的注释之一。spring在运行后会扫描所有包、子包和里面的子类,并读取各种注释。而@Controller的作用就是让spring把该类注入IOC容器中,作为Spring的Bean来管理。同时配合其他注释(例如@RequestMapping),可以让接口定义更简单(例如,多个具有相似性的接口可以放在同一个类中,映射路径的规定也会规范)。
此外,在@controller注解中,如果返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,跳转到jsp、ftl、html等模版页面。
*在下属方法名不加其他注释的情况下只能返回String即页面(待进一步查询)
**方法返回不是string时会不会报错待查证
@Controller
public class ExampleController {
@RequestMapping("/example")
public String exampleMethod(@Param("example") String param){
return "success"; //此时返回的时页面名为“success”的页面。
}
}
2.2 @ResponseBody
@ResponseBody的主要含义是让方法返回数据而不像@Controller那样直接返回界面。
被@ResponseBody注释的方法即使返回类型是String,也只是返回String类型的数据,而不是页面。默认情况下,使用@ResponseBody返回的数据只能是String类型,其它类型返回时会出现异常(似乎是因为前端接受的数据类型是JSON,通常的后端返回值类型在不做处理的情况下只有String能被前端接受)。这种时候可以用类型转换器去解决Java对象和JSON对象不匹配的问题。这里不再赘述。
2.3 @RestController
至此就明白了该注释的作用了。在实现@Controller的注入功能前提下,让该类里的所有方法返回的是JSON数据。这样就不需要一个个方法上去加@ResponseBody。