SpringBoot基础之控制层Controller详解
1.Controller层主要工作:
从HTTP请求中获取信息,提取参数,并将其分发给不同的处理服务(service层),并向前端返回service层处理后的数据(JSON数据或者ModelAndView对象)。
**注:**这里,第一次接触可能不理解分发是什么意思,其实就是有controller根据实际需求调用不同的service层类函数来处理不同业务。
2.Controller层重要注解:
- @Controller
- @RequestMapping
- @ResponseBody
- @RestController
- @GetMapping
- @PostMapping
3.@Controller
负责标识这个类是个Controller类,Spring检测到@Controller注解时,将其自动注册为Controller对象。
4.@RequestMapping
基本用法
@RequestMapping注解告知Spring这个类或者函数映射到哪个URL,通常@RequestMapping参数有:
@RequestMapping(
path = { "/test" },
params = { "name", "userId"},
method = { RequestMethod.GET},
consumes = {"text/plain", "application/"},
produces = "text/plain",
headers = "content-type=text/"
)
其中,path表示访问路径,params表示URL携带的参数,method表示请求方式
(1)@RequestMapping参数为空时,表示该函数或者类映射剩余所有页面,也就是404页面
(2)@RequestMapping不指定参数名时,默认为path参数
(3)@RequestMapping的path参数可以是个变量,通过{}来标识。
(4)@PathVaiable用于读取URL中的数据
@Controller
public class TestController{
@RequestMapping(path="test/login/{name}/{id}", method=RequestMethod.GET)
public String loginTest(@PathVariable("name") String strName, @PathVariable("id") Integer id){
return strName +id.toString();
}
}
5.@ResponseBody
正常情况下,Controller类中函数返回是一个模板对象(页面),但是有时候我们希望返回值数值型(字符串或者Json格式数据),这时就需要添加@ResponseBody注解,@ResponseBody注解可以添加到类或者函数上。
6.@RestController、@GetMapping和@PostMapping
这三个注解都是组合注解,其中
@RestController相当于@Controller + @ResposeBody
@GetMapping相当于@RequestMapping(method=RequestMethod.GET)
@PostMapping相当于@RequestMapping(method=RequestMethod.POST)
注:
@GetMapping用于获取信息(可以理解为Select操作), @PostMapping用于更新信息(可以理解为Update)。
这样解释大家可能看得云里雾里,因为我们并没有明确问题的立足点:如@GetMapping是谁向谁获取信息,@PostMapping是谁发出的更新命令,这里需要明确,我们的立足点是前端(也就是前端是动作的发出者,后端是动作的执行者)。也就是:@GetMapping表示前端向后端发出请求数据命令,后端根据具体请求(URL)找到对应的资源并返回给前端。@PostMapping表示前端向后端发送数据,后端根据命令,将给数据持久化到数据库中,实现数据的更新。
7.项目前后台交互的话 无非两种方式
- 一种普通整体页面提交,比如form提交;
- 还有一种局部刷新,或者叫做异步刷新,ajax提交;
@Controller就是整体页面刷新提交的处理注解
@RestController就是ajax提交,一般返回json格式