返回静态页面
MVC如何识别这是个静态页面并返回呢?
需要改变注释@RestController 为 @Controller
@Controller 单独使用的话肯定是可以返回界面的,但是加上@ResponseBody ResponseBody是一个针对方法返回值进行处理的注解,处理后的RestController注解会将所有处理请求的方法默认解析为将方法返回值直接作为响应体内容返回,主要用于构建RESTful API,返回的数据通常是JSON或XML格式,因此返回形式肯定是和单独使用controller注解不同的
@Controller
public class IndexController{
@RequestMapping("/index")
public Object index(){
return"/index.html";
}
}
- MVC的概念也逐渐发生了变化,View不再返回视图,而是返回显示视图时需要的数据.
所以前面使用的@RestController 其实是返回的数据.
@RestController = @Controller + @ResponseBody
@Controller:定义一个控制器, Spring框架启动时加载,把这个对象交给Spring管理.
@ResponseBody: 定义返回的数据格式为非视图,返回一个text/html信息
@RestController 源码:@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Controller @ResponseBody public @interface RestController { @AliasFor( annotation = Controller. class ) String value() default ""; }
上图前三个注解被称为元注解
@Target 表示注解修饰的对象
@Retention 表示注解的生命周期
@Documented 表示文档(是否保留)
@Controller 返回视图 随着前后端分离,后端不处理页面,就返回页面所需要的数据
@ResponseBody 返回数据
返回数据@ResponseBody
跟请求很像
修饰类的时候,表示这个类下的所有方法,返回的均为数据
修饰方法时,表示该方法返回的是数据
如果一个类中的所有方法返回的都是数据,我们就把这个注解加在类上
返回HTML代码片段
返回JSON
当接口返回的String等类型,content-Type是text/html
当接口返回的对象,map,content-Type默认是application/json
设置状态码
状态码不影响页面展示
设置Header(了解)
@RequestMapping 源码
- 1. value:指定映射的URL
2. method:指定请求的method类型,如GET, POST等
3. consumes:指定处理请求(request)的提交内容类型(Content-Type), 例如application /json, text/html;
4. produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
5. Params:指定request中必须包含某些参数值时, 才让该方法处理
6. headers:指定request中必须包含某些指定的header值, 才能让该方法处理请求