🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 一、返回页面 在controller类中返回到页面中一共有两种方式,即controller的返回值为ModelAndView或者String。二者的区别就在于ModelAndView能够像session一样存储一些属性。 使用ModelAndView作为返回值: ~~~ @Controller public class LoginController { @RequestMapping(value = "/login") public ModelAndView login(){ ModelAndView mv = new ModelAndView(); mv.setViewName("/login.html"); return mv; } } ~~~ 使用String作为返回值: ~~~ @Controller public class HelloController { @RequestMapping("/hello") public String hello() { return "sampe/test/hello.html"; } } ~~~ >[danger] springboot中静态资源默认是放在static路径下的,换而言之就是html等页面的根路径是static,但是,如果整合了thymeleaf之后,静态资源默认是放在templates路径下的,也就是html等页面的根路径是templates了; ## 二、控制器类型 @Controller和@RestController; ### **@Controller** 它返回一个页面; 单独使用 @Controller不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况; ![](https://img.kancloud.cn/16/83/1683684e4b1ca6c98987e6244308d64a_500x313.png) >[danger] 注意: > 1、@Controller +@ResponseBody=@RestController; > 2、@ResponseBody 注解的作用是将 Controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到HTTP 响应(Response)对象的 body 中,通常用来返回 JSON 或者 XML 数据,返回 JSON 数据的情况比较多; ### **@RestController** 它返回JSON 或 XML 形式数据; @RestController只返回对象,对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中,这种情况属于 RESTful Web服务,这也是目前日常开发所接触的最常用的情况(前后端分离); ![](https://img.kancloud.cn/23/7f/237ffb25961cb5bb038bb41acd3febc9_505x239.png) ## 三、请求映射 @RequestMapping将 HTTP 请求映射到 MVC控制器 和 REST 控制器的处理方法上;可以同时在类和方法上应用; 在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系; method: 指定请求的method类型, GET、POST、PUT、DELETE等; @RequestMapping的不同Method还有更多的等价的标注; 例如: @RequestMapping(value="/{day}", method = RequestMethod.GET) 等于:@GetMapping @RequestMapping(value="/{day}", method = RequestMethod.POST) 等于:@PostMapping ## 四、方法参数输入 ### (1)**请求路径参数** **@PathVariable**:接收请求路径中占位符的值; 例如: @PathVariable("xxx") 通过 @PathVariable 可以将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“) @RequestMapping(value=”user/{id}/{name}”) 请求路径:http://localhost:8080/hello/user/1/james **@RequestParam**:常用于GET,也可用于POST 获取查询参数。即*url?name=*这种形式 ### (2)**Body参数** **@RequestBody**:只可用于POST @RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交;在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个; @RequestBody可以自动的将请求的json数据装配为对象,也可以直接以字符串的形式获取; **无注解** ### (3)**请求头参数以及Cookie** **@RequestHeader** @RequestHeader 是获取请求头中的数据,通过指定参数 value 的值来获取请求头中指定的参数值。其他参数用法和 @RequestParam 完全一样; @CookieValue 用来获取Cookie中的值; 跟@RequestHeader类似,无须通过参数传值; ## 五、方法返回值 Controler的返回值可以是modelAndView或页面模板等; RestController的返回值都会转换为json字符串; ## 六、周边设施 Filter,Inteceptor等机制: ![](https://img.kancloud.cn/65/c1/65c1cd5e3f193e3020c8b39a2e9cebed_1413x1014.png)